什么可能导致此内存访问错误(C++)?可能是未定义的行为?

Cas*_*ton 0 c++ visual-studio-2005 unhandled-exception undefined-behavior write-error

我有一个相对较大的类,我正在使用它,到目前为止一切正常(注意:我实际上没有编写类,我只是添加了一些功能).但是,在头文件中再声明一个字符串后,现在一切都崩溃了(我得到了内存访问错误).如果我删除该字符串并重建,一切正常.

我实际上并没有使用该字符串做任何事情....只是声明它的行为导致了一些奇怪的内存错误.

我无法详细解释这个问题,因为尝试解释每个功能都是浪费.我应该在这里寻找什么样的东西才能找到问题?什么可能导致这种奇怪的行为?

错误本身是:
Unhandled exception at 0x65fd17fd (msvcp80d.dll) in myFile.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.

基本上.h文件中的所有更改都是:

StringType string1;
Run Code Online (Sandbox Code Playgroud)

转换成:

StringType string1;
StringType string2;
Run Code Online (Sandbox Code Playgroud)

StringType是basic_string的扩展

Jam*_*lis 5

您已在堆上分配了一些内存,但未能初始化它.

0xcd 是调试堆使用的填充模式:在为程序提供动态分配的内存之前,它会填充该模式以帮助您查找未初始化的变量.

至于为什么更改类定义会影响结果,您可能正在执行不正确的指针算法,访问动态分配对象末尾之外的某些内容,或者当您拥有更大的内容时不再表现为错误的任何其他内容之一宾语.如果某些源是使用旧定义构建的,而某些源是使用新定义构建的,那么您也可能违反了单定义规则.

有很多事情可以导致这种问题:最好的办法是在调试器发生时将其打破,然后向后追踪以查看错误发生的位置(有时这可能很有趣;我必须追踪一个未初始化的变量通过网络连接一次).