Цель нижеследующего кода - исправить ложное значение (-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.
Я нашел ошибку отладки также будет происходить, когда я использую таНос. Когда я возьму 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;
}
Каковы возможные значения для 'from' и' to' в 'DFS_CODE' размера n? – fredoverflow
Я уверен, что это значение правильно. Проблема возникает, когда я использую код 'delete [];' – LoveTW
Проблема возникает, когда вы используете delete [] или бесплатно, потому что раньше вы разложили кучу. В какой-то момент вы записываете данные за пределы вашего массива «code», тем самым изменяя следующие/предыдущие указатели в блоках кучи. Это не имеет никакого отношения к delete [] или бесплатному. – mfontanini