0

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

我实际上并没有对那个字符串做任何事情......只是声明它的行为会导致一些奇怪的内存错误。

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

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

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

StringType string1;

转换成:

StringType string1;
StringType string2;

StringType 是 basic_string 的扩展

4

1 回答 1

5

您在堆上分配了一些内存,但未能对其进行初始化。

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

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

有很多事情会导致此类问题:最好的办法是在调试器发生时中断调试器,并向后追溯以查看错误的来源(有时这很有趣;我必须跟踪未初始化的变量通过网络连接一次)。

于 2011-07-20T18:14:58.743 回答