test
представляет собой массив указателей на Чар, расположенных в стеке, и строковые литералы "foo"
, "bar"
, "car"
хранятся в только для чтения места. Вам нужно ничего не освобождать.
test[0]
, test[1]
, test[2]
Указывает на данные только для чтения. Прочитайте о правилах определения и времени жизни переменной в C. По умолчанию переменная, которая не имеет спецификатора класса хранения в блоке, имеет спецификатор класса хранения auto
, что означает переменную с локальным временем жизни.
{
char* test[] = {"foo","bar","car"};
}
//cannot access test here
test [0] = "new"; // Compile time error - ‘test’ undeclared
При попытке изменить "бар" в "тар" даст ошибку во время выполнения:
char* test[] = {"foo","bar","car"};
test[1][0] = "tar"; // Run-time error
Однако это хорошо test[0]
начинает указывать на "new"
от "foo"
:
test [0] ="new";
Ссылка на "foo"
потеряна.
Хорошее эмпирическое правило состоит в том, что вам нужна только свободная память a), которую вы создаете (например, с помощью 'malloc' или' mmap') или b), которая возвращается функцией, которая ** явно документирует * * что вы несете ответственность за это. –