Где выделена память при создании этого массива? (С)

Скажем, я делаю что-то вроде:

char* test[] = {"foo","bar","car"}; 

Что именно это эквивалентно, если я сделал это долгий путь? Это автоматически создает память, которую мне нужно будет освободить? Я просто смущен. Благодарю.

test – это массив указателей на char, расположенный в стеке, а строковые литералы "foo" , "bar" , "car" хранятся в месте только для чтения. Вам нужно ничего не освобождать.

test[0] , test[1] , test[2] указывают на данные только для чтения. Пожалуйста, прочитайте о правилах определения и времени жизни переменной в C. По умолчанию переменная, которая не имеет спецификатора classа хранения в блоке, имеет спецификатор classа auto хранения, который означает переменную с локальным временем жизни.

 { char* test[] = {"foo","bar","car"}; } //cannot access test here test [0] = "new"; // Compile time error - 'test' undeclared 

При попытке изменить «бар» на «tar» будет выдаваться ошибка времени выполнения:

 char* test[] = {"foo","bar","car"}; test[1][0] = "tar"; // Run-time error 

Однако это тонкий test[0] начинает указывать на "new" из "foo" :

 test [0] ="new"; 

Ссылка на "foo" теряется.

Вы объявляете массив указателей. Указатели указывают на строковые литералы.

Тест переменной следует за нормальным правилом, если это автоматическая переменная (область внутри некоторой функции), когда из функции она выходит из области видимости, поэтому вам не нужно освобождать память. Если он статически выделяется (глобальная или static переменная), он имеет жизнь до тех пор, пока программа, так что вам также не нужно освобождать память.

Строковые литералы, которые указывают указатели, имеют статическое хранилище, поэтому вы также не освобождаете их.

Test – это массив charecter pointers Когда инициализация значений предоставляется для массива, C позволяет оставлять квадратные скобки пустыми []. В этом случае компилятор примет размер для массива, который соответствует числу значений, заключенных между фигурными скобками { } . Нет необходимости освобождать.

Долгий путь – использовать malloc и malloc размер строки.

тест будет нажат на кучу

http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html