如果确实分配了内存,为什么不必释放字符串?
就像您这样做时一样:
char *string;
string = malloc(100);
它可能在某些方面有所不同,因为char[100]
是静态的而另一种是动态的吗?
[char string[100];
分配内存,只要变量存在。
如果它是static变量,则只要程序运行即可。变量在bss
或data
段(或rodata
或编译器链接程序系统认为合适的任何其他段)中静态分配。
如果它是dynamic
(在C标准中为“自动”)变量,则只要包含块运行即可。该变量最通常在堆栈上分配,并且在调整堆栈指针后,该空间会在块的末尾自动“释放”。相反,如果使用malloc()
,则通常在堆上分配空间。完成后,您必须通过free()
退还给您自己进行管理。
因此,为了从字面上回答您的问题,no
,char string[100];
确实not通过malloc()
分配内存。因此,无需调用free()
,这将是一个错误。