2016-02-12 5 views
0

Копирование одного указателя на другой элемент по элементу на C++ и получение «Ошибка в` ./hsc.exe »: двойная свобода или коррупция (! Prev): 0x0000000000aadcc0 *** Aborted (core dumped)».Копирование и удаление указателей с помощью массивов

Я попытался отладить его, и я застрял на линии «удалить [] стержни;» поскольку я не могу удалить стержни, поскольку я также удаляю информацию, относящуюся к «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

Вы используете какой-либо язык программирования в частности? –

+1

Вы должны были создать простой пример, который может быть скомпилирован независимо и воспроизводит проблему. Тем не менее, то, как вы играете с родными массивами, необработанными указателями, новыми, копиями и удалениями, почти неизбежно приводит к неприятностям. Это просто небезопасно. –

+1

temp [i] = стержни [i]; есть возможность неглубокой копии, поэтому может быть шанс, что вы дважды освобождаете память. – evk1206

ответ

0

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

Существует possibilty, что это происходит из-за мелкую копию. Вы должны использовать overloaded = operator.

rods[i]= temp[i]; 

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

Смежные вопросы