2013-02-27 1 views
0

Заявления:память выделяется новый INT [10] должно быть высвобождены с удалением []

память выделяется новый INT [10] должны быть высвобождены с удалением [].

Так ..

new int[10]; 

Тогда как я могу удалить его?

EDIT: Спасибо, ребята :) Я думаю, что Уилсон, Пол, Тим и т.д. правы, утверждение опускает некоторые слова поэтому меня смутили - -... это просто

int * p = new int[10]; 

delete [] p; 

Я никогда не видел ответа Роба, но выглядит для меня совершенно новым! Любое объяснение будет понятно :)

delete[] new int[10]; 
+0

Вы не можете удалить его, потому что у вас нет ручки к нему. – juanchopanza

+6

Чтобы сохранить тот же стиль, 'delete [] new int [10];' –

+0

Вы должны использовать 'std :: vector '. Я не помню, когда я писал 'delete' или' delete [] 'последний раз в коде. – Naszta

ответ

6

Вы упускаете переменную для хранения значения, возвращаемого из нового. Вы должны иметь что-то вроде:

int* intArray = new int[10]; 

затем позже, когда вы хотите, чтобы удалить память, вы ссылаться на него через переменную:

delete[] intArray; 
1

Так же, как он говорит:.

int *foo = new int[10]; 
delete[] foo; 
+0

, если я не удалю выходы из памяти и программы. Тогда может быть какой-то риск? (Значит, нам просто нужно удалить память во время выполнения?) – UnKnown

1
int * p = new int[10]; // allocate p 

// do stuff with p 

delete [] p;   // release p when you're done 
+0

, если я не удалю выходы из памяти и программы. Тогда может быть какой-то риск? Кто-то сказал мне, что если мы не освободим память и выход программы, то эта память будет непригодной до тех пор, пока не будет установлена ​​система оператора. – UnKnown

+0

Большинство современных операционных систем очистят оставшиеся ассигнования памяти при выходе из программы, но в любом случае полезно освобождать все динамические распределения - это упрощает поиск утечек памяти, и может стать важным, если программа будет повторно изменена. –

+0

действительно удаляет действительно чистую/чистую память? – UnKnown

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