C++ C++;将属性添加到结构会生成;触发一个断点";

C++ C++;将属性添加到结构会生成;触发一个断点";,c++,visual-studio,C++,Visual Studio,我正在开发一个应用程序,用于在Windows 8.1上使用Visual Studio 2013读取和编辑JPEG文件中的Exif元数据 我有一个名为Photoprove的类,我正在使用demo.cpp文件检查这个类的功能 在Photoprove类中,我有一个名为Metadata的结构,用于保存JPEG中Exif字段的各种值,它的开头如下: struct Metadata{ int tagID=0; BYTE* values; int noValues=0; lon

我正在开发一个应用程序,用于在Windows 8.1上使用Visual Studio 2013读取和编辑JPEG文件中的Exif元数据

我有一个名为Photoprove的类,我正在使用demo.cpp文件检查这个类的功能

在Photoprove类中,我有一个名为Metadata的结构,用于保存JPEG中Exif字段的各种值,它的开头如下:

struct Metadata{
    int tagID=0;
    BYTE* values;
    int noValues=0;
    long valuesStart=0;
    int ifdNo = 0;  //0=IFD0, 1=Exif, 2=GPS, 3=Interop, 4=IFD1
    ...
目前,一切正常,但我想添加另一个属性以十六进制显示tagID,因此我将结构修改为:

struct Metadata{
    int tagID=0;
    std::string tagHex = "";
    BYTE* values;
    ....
这是唯一的更改,但会在demo.cpp中main()的末尾导致“触发断点”错误-它发生在右括号中

这里是dbgheap.c的内容在它停止的地方,也就是结束括号

 extern "C" CRTIMP int __cdecl _CrtIsValidHeapPointer(const void * pUserData )
 {
    if (!pUserData)
        return FALSE;

    if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader),   FALSE))
        return FALSE;

    return HeapValidate( _crtheap, 0, pHdr(pUserData) );
 }

如果您能就可能导致这种情况发生的原因提出建议,我将不胜感激。

当“崩溃”发生时,请沿着调用堆栈一直到您的代码,并查看那里,而不是引发异常的CRT代码。关于崩溃的原因,您如何使用该结构?您是否使用与对象或
std::string不兼容的操作?例如
memcpy`或类似产品?你能不能试着创建一个。然后告诉我们?你的结构是在头文件中定义的吗?如果是这样的话,最好是对所有东西进行彻底的重建。你能重做你的测试吗,但是每次都要重建所有的东西吗?我要按照@Aaron McDaid的建议尝试一次完整的重建,因为我的代码还有一些其他部分需要整理。我会通过“重建”让你知道我是如何开始的,我不是要删除你的代码并重写它!我只是指在VisualStudio中找到相关选项,强制重新编译所有对象