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

What could be causing this memory access error (C++)? Might be undefined behavior?

本文关键字:未定义 C++ 错误 访问 内存 是什么      更新时间:2023-10-16

我正在处理一个相对较大的类,到目前为止一切都很好(注意:我实际上并没有写这个类,我只是添加了一些功能(。然而,在头文件中又声明了一个字符串之后,现在一切都崩溃了(我得到了一个内存访问错误(。如果我擦除那个字符串并重新构建,一切都会很好。

我实际上并没有用那根绳子做任何事情。。。。仅仅是声明它的行为就导致了一些奇怪的内存错误。

我不能再详细解释了,因为试图解释每一个函数都是浪费。我应该在这里找什么样的东西才能找到问题?是什么原因导致了这种奇怪的行为?

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

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

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

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

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