Что я хочу сделать, это выделить char** stringarr
.c: свободный символ * без разрушения char **
В некоторых местах, stringarr[index]
, я хочу назначить char*
. Так что я хочу сохранить строки (char*
) в некоторых местах char **
. Например после того как программа не закончилась:
stringarr[0] = "Hello", stringarr[1] = "goodbye"
Проблема заключается в том, что я хочу, чтобы освободить char *
удерживающие строки, но когда я делаю конечно stringarr[0]
больше не будет указывать на освобожденную char*
.
Как я могу это решить?
Чтобы уточнить: Я хочу добавить строки (char *) в массив строк (char **). Затем я освобождаю строки, но не строковый массив. Как я могу это сделать, не затрагивая char **?
_Пожалуйста, уточните вашу конкретную проблему или добавьте дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу «Как спросить» для получения справки об этом вопросе._ –
[Как спросить страницу] (http://stackoverflow.com/help/how-to-ask) – gavv
Вышеупомянутый код устанавливает 'stringarr [0]' в точку в строковый литерал, который не может быть освобожден. Самое большее, что вы можете сделать, это установить 'stringarr [0]' на что-то другое, например 'NULL'. Если вместо этого вы делаете что-то вроде 'char * foo = malloc (10); strcpy (foo, "fred"); stringarr [0] = foo; ', и вы позже называете' free (foo) ', это зависит от вашего кода, чтобы гарантировать, что он никогда не обращается к буферу, на который указывает' stringarr [0] '. Как вы это достигаете, это зависит от вас. Убедившись, что ваш код сбрасывает 'stringarr [0] = NULL;' после освобождения 'foo' и всегда всегда проверяет, является ли' stringarr [0] 'NULL или нет, является одним из способов его достижения. –