Копирование и удаление указателей с массивами

Копирование одного указателя на другой элемент за элементом в 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;

0

Решение

Ошибка двойного освобождения или повреждения:

Есть вероятность, что это связано с мелким копированием. Вы должны использовать перегруженный = оператор.

rods[i]= temp[i];

это может привести к тому, что оба объекта имеют элементы данных, указывающие на одно и то же местоположение, и когда вы вызываете delete из обоих, вы освобождаете память, выделенную дважды. Смотрите о конструкторе COpy и операторе перегрузки =.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector