Как вы полностью удаляете массив в C, до такой степени, что вы можете повторно инициализировать его? - PullRequest
3 голосов
/ 06 мая 2011

Как в: Как вы восстанавливаете память и удаляете массив до такой степени, что вы можете инициализировать его позже в программе?Вот так:

char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}
// Delete array
sizeof(array) == NULL;
char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}

Ответы [ 4 ]

5 голосов
/ 06 мая 2011

Вы не можете.Массив, определенный с помощью скобок (вне области действия функции 1 ), компилируется непосредственно в вашу программу и поэтому не может быть освобожден.Однако вы можете повторно инициализировать его, просто записав в него исходное содержимое.Если вы хотите иметь возможность создавать и уничтожать массив по своему желанию, вам нужно сохранить его как указатель и использовать malloc и free.

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

2 голосов
/ 06 мая 2011

Вы не можете произвольно уничтожать статические и / или функционально-локальные объекты.

Единственные объекты, временем жизни которых вы можете явно управлять, это те, которые выделяются динамически (например, с malloc).

2 голосов
/ 06 мая 2011

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

1 голос
/ 06 мая 2011

Используйте "семейство malloc": malloc(), calloc(), realloc() и free().

Не забудьте #include <stdlib.h>!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...