Я пишу программу на C++, которая хранит строки в массиве строк, когда массив заполнен. Я изменяю размер массива, чтобы освободить место для большего количества элементов, используя приведенный ниже код. Но иногда (не всегда) он падает с «delete [] temp;» и я не знаю, почему и как это исправить. Пожалуйста помоги.C++ delete [] crashes
Я много искал, но не мог найти ответ нигде. Когда я отлаживаю, он говорит «недопустимый указатель», но как он может быть недействительным, когда я хранил данные там раньше и еще не освобождал его?
Это мой код:
if(item_cnt >= (arr_size - 1))
{
int oldsize = arr_size;
string * temp;
arr_size *= 2;
temp = arr;
arr = new string [arr_size];
memcpy(arr, temp, oldsize * sizeof(temp));
delete[] temp;
}
Некоторые моменты стиля: вы должны использовать 'std :: copy', а не' memcpy'. И вы не должны заниматься ручным управлением памятью ('new',' delete' и т. Д.), Вы должны использовать класс контейнера, чтобы обрабатывать все это автоматически. –
'memcpy (arr, temp, oldsize * sizeof (temp));' - Не должно быть 'sizeof (* temp)'? (да, хотя, конечно, memcpy неправильно для начала) –
Это плохо ... Не используйте memcpy для строк. Используйте 'string myString (toBeCopied);' .. см. Здесь: http://anaturb.net/C/string_exapm.htm –