Указатели на Const Char

Следующий код указывает на первый символ в массиве символов, ansible в памяти только для чтения. Это правильно?:

const char * ptr = "String one"; 

Теперь, когда ptr начинает указывать на другое место памяти:

 ptr = "String two"; 

Что происходит с первым массивом символов ? Это освобождение памяти освобождается при завершении выполнения?

Стандарт только говорит о том, что строковые литералы имеют статическую продолжительность хранения , а это означает, что время жизни переменной до завершения программы и инициализируется при запуске программы. Соответствующий раздел в проекте стандарта С11 – пункт 6.4.5 пункта 6 :

[…] Последовательность многобайтовых символов затем используется для инициализации массива статической продолжительности хранения и длины, достаточной для того, чтобы содержать последовательность. […]

Он может быть в памяти только для чтения и, вероятно, есть, но это реализация определена. Его не нужно освобождать, только память, динамически распределенная через malloc нуждается в последующем обращении к free .

Если я использую эту программу:

 int main() { const char * ptr = "String one"; return 0; } 

и мы построим его с помощью gcc а затем будем использовать objdump :

 objdump -s -j .rodata a.out 

Мы обнаружим, что в этом случае он действительно хранится в разделе данных только для чтения:

 Contents of section .rodata: 400580 01000200 53747269 6e67206f 6e6500 ....String one. 

Вы можете запустить его здесь