Копирование одного указателя на другой элемент за элементом в C ++ и получение «Ошибка в` ./hsc.exe ‘: двойное освобождение или повреждение (! Prev): 0x0000000000aadcc0 ***
Прервано (ядро сброшено) «.
Я попытался отладить его, и я застрял в строке «удалить [] стержней;» поскольку я не могу удалить стержни, так как я также удаляю информацию, относящуюся к «temp».
Вот следующая часть кода.
int * rods; // Defining rods and temp
int * temp;
int N_r =5;
rods = new int[N_r];
temp = new int[N_r];
for (int i = 0; i < N_r; i++){ // Copying rods to temp
temp[i] = rods[i];
}
delete[] rods; // deleting rods
rods = NULL;
rods = new int[N_r]; // creating new rods
for (int i = 0; i < N_r; i++){ // copying temp to rods
rods[i] = temp[i];
}
delete[] temp; // delete temp
temp = NULL;
Ошибка двойного освобождения или повреждения:
Есть вероятность, что это связано с мелким копированием. Вы должны использовать перегруженный = оператор.
rods[i]= temp[i];
это может привести к тому, что оба объекта имеют элементы данных, указывающие на одно и то же местоположение, и когда вы вызываете delete из обоих, вы освобождаете память, выделенную дважды. Смотрите о конструкторе COpy и операторе перегрузки =.
Других решений пока нет …