以下のコードの目的は、false値(-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
構造体を使用します。私を助けるすべての人に感謝します!宜しくお願いします!私には不審な
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'の値は何でしょうか? – fredoverflow
私はこれらの価値が正しいと確信しています。問題は、私が 'delete [] code;;を使用したときに発生します。 – LoveTW
以前にヒープを破損しているため、delete []またはfreeを使用すると問題が発生します。ある時点で、 "code"配列を超えてデータを書き込んでいるため、ヒープブロック内の次の/ prevポインタを変更します。これはdelete []やfreeとは関係ありません。 – mfontanini