Когда строковый литерал "привет" выделен и освобожден в течение времени жизни программы в этом примере?
init(char **s)
{
*s = "hello";
}
int f()
{
char *s = 0;
init(&s);
printf("%s\n", s);
return 0;
}
Компилятор инициализирует строковый литерал в сегмент памяти, доступный только для чтения. Во время исполнения не производится инициализация или удаление.
.Они не выделяются, а хранятся в сегменте ДАННЫХ исполняемого файла.
Если предположить, что есть операционная система, то память, содержащая строковый литерал, выделяется при загрузке исполняемого файла и перераспределяется при выгрузке исполняемого файла. Именно тогда, когда это происходит, зависит от типа исполняемого файла (программа, разделяемая библиотека и т.д.) и от ОС.
.