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

时间:2011-07-20 18:08:27

标签: c++ visual-studio-2005 undefined-behavior unhandled-exception write-error

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

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

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

错误本身是:     
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

的扩展

1 个答案:

答案 0 :(得分:5)

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

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

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

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