Standart, yalnızca dize değişmezlerinin statik depolama süresi olduğunu, yani değişkenin ömrünün program bitene kadar olduğunu ve program başladığında başlatıldığını belirtir. [...] baytlı karakter dizisi, daha sonra statik depolama süresi ve sekansı ihtiva sadece yeterli uzunlukta bir dizi başlatmak için
kullanılır: C11 draft standard ilgili bölümü 6.4.5
paragraf olup. [...]
Sadece okunabilir bellekte olabilir ve büyük olasılıkla, ancak bu uygulama tanımlıdır. Serbest bırakılmasına gerek yoktur, sadece malloc
aracılığıyla dinamik olarak ayrılan belleğe bir sonraki free
numaralı çağrıya ihtiyaç duyar.
ben bu programı kullanıyorsanız:
int main()
{
const char * ptr = "String one";
return 0;
}
ve biz gcc
ile inşa ve sonra objdump
kullanın:
objdump -s -j .rodata a.out
Biz gerçekten salt okunur saklanır bu durumda olduğunu göreceksiniz veri bölümü:
Contents of section .rodata:
400580 01000200 53747269 6e67206f 6e6500 ....String one.
Kendiniz de koşabilirsiniz here
Dize değişmezleri statik ayırmalardır. Serbest bırakılmaları gerekmiyor. –
Bu soruyu da kontrol edin: [char-char * string-literals kullanarak başlatılmalı mıyım?] (Http://stackoverflow.com/questions/9504588/should-i-free-char-initialized-using-string-literals) – sidyll
Neden serbest bırakılmalı mı? işaretçi sadece farklı bir dizgi değişmezini işaret eder ve kabul edilen cevapta açıklandığı gibi dize değişmezlerinin statik depolama süresi vardır, böylece serbest kalmazlar. – 0decimal0