进行内存释放时出现调试错误
debug error when doing memory release
以下代码的目的是将错误值(-1)更正为正确值,但当我使用动态数组记录正确值时,会发生调试错误。有人能帮我吗?谢谢
代码.cpp
int size = DFS_CODE.size();
int *code = new int[DFS_CODE.size()];
for(int i = 0; i < DFS_CODE.size(); i++) {
if(DFS_CODE[i].fromlabel == -1)
DFS_CODE[i].fromlabel = code[DFS_CODE[i].from];
else if(DFS_CODE[i].tolabel == -1)
DFS_CODE[i].tolabel = code[DFS_CODE[i].to];
code[DFS_CODE[i].from] = DFS_CODE[i].fromlabel;
code[DFS_CODE[i].to] = DFS_CODE[i].tolabel;
cout << DFS_CODE[i].from << "(" << DFS_CODE[i].fromlabel << ") => "
<< DFS_CODE[i].to << "(" << DFS_CODE[i].tolabel << ")" << endl;
}
delete [] code;
调试错误
debug error!
HEAP CORRUPTION DETECTED:after Normal block(#1363) at 0x005745F0.
CRT detected that the application wrote to memory after end of heap buffer.
我发现当我使用malloc时也会发生调试错误。当我使用delete [] code;
或free(code);
时,会发生调试错误。为什么?我不应该释放记忆吗?
我通过另一种方式解决了这个问题,我使用map
结构来存储正确的值。感谢所有帮助我的人!顺致敬意,
map <int, int> code;
for(int i = 0; i < DFS_CODE.size(); i++) {
if(DFS_CODE[i].fromlabel != -1)
code[DFS_CODE[i].from] = DFS_CODE[i].fromlabel;
if(DFS_CODE[i].tolabel != -1)
code[DFS_CODE[i].to] = DFS_CODE[i].tolabel;
cout << DFS_CODE[i].from << "(" << code[DFS_CODE[i].from] << ") => "
<< DFS_CODE[i].to << "(" << code[DFS_CODE[i].to] << ")" << endl;
}
我怀疑这些线路是
code[DFS_CODE[i].from] = DFS_CODE[i].fromlabel;
code[DFS_CODE[i].to] = DFS_CODE[i].tolabel;
当您按照以下分配代码时
int *code = new int[DFS_CODE.size()];
请确保检查.from和.to是否<DFS_CODE.size()和>=0,否则您在堆分配的数组之外进行写入,这可能会导致堆损坏。
此外,是否有原因不将阵列code
完全替换为
std::vector<int> code
请注意,当您为"代码"分配内存时,它不会初始化
int *code = new int[DFS_CODE.size()];
下面的代码使用它…
for(int i = 0; i < DFS_CODE.size(); i++) {
if(DFS_CODE[i].fromlabel == -1)
DFS_CODE[i].fromlabel = code[DFS_CODE[i].from];
else if(DFS_CODE[i].tolabel == -1)
DFS_CODE[i].tolabel = code[DFS_CODE[i].to];
这可能会导致DFS_CODE接收到未定义的值,这不是你的问题,但很可疑。。。
相关文章:
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 分段错误 .AnsiStringToUnicodeString 作为第一个调试错误行.杜比奥斯类等级制度
- 尝试在我的基类中启动线程时,Visual Studio 由于调试错误而中止我的程序
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- 如何调试错误代码 77:cudaErrorIllegal地址当 cuda-memcheck 没有发现问题时
- 如何调试错误消息"abort() has been called"?
- Eclipse调试错误:没有此类文件或目录 n
- 调试错误,在C++中检测到堆损坏
- Qt:如何在QByteArray中调试错误的分配异常
- 尝试运行程序时会收到调试错误
- C 高分列表调试错误
- 我的C++函数不断收到调试错误。我不确定我做错了什么
- 使用 GDB 在 main() 之前调试错误
- c++中的调试错误
- 多线程效率低下:调试错误共享
- 调试错误.已调用R6010中止()
- C++的调试错误真的很令人沮丧
- SDL 项目的调试错误"没有可用于 main() 的源代码"
- 调试错误R6010-已调用abort()
- 程序在Visual Studio Community 2015中执行后,它会显示调试错误