【发布时间】:2012-03-18 12:08:23
【问题描述】:
以下代码的目的是将错误值(-1)更正为正确值,但是当我使用动态数组记录正确值时,会发生调试错误。有人能帮我吗?谢谢。
code.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 struct 来存储正确的值。感谢所有帮助我的人!最好的问候!
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;
}
【问题讨论】:
-
在大小为 n 的
DFS_CODE中,from和to的可能值是多少? -
我确信这些值是正确的。当我使用
delete [] code;时会出现问题 -
当您使用 delete[] 或 free 时会出现问题,因为您之前破坏了堆。在某些时候,您正在编写超出“代码”数组的数据,因此修改了堆块中的下一个/上一个指针。这与 delete[] 或 free 无关。
-
感谢您的帮助!但是我仍然无法通过使用动态数组来解决这个问题...,但我通过使用
map结构来解决它:)
标签: c++ compiler-errors