如果它确实分配内存,为什么不需要释放字符串?
如果你这样做的话,就像你会做的那样:
char *string;
string = malloc(100);
它是否可能在某些方面有所不同,因为 char[100]
是静态的,另一种方式是动态的?
最佳答案
char string[100];
只要变量存在,就会分配内存。
如果它是静态变量,则只要程序运行即可。该变量在 bss
或 data
段(或 rodata
或编译器链接器系统认为合适的任何其他段)中静态分配。/p>
如果它是一个动态(C 标准中的“自动”)变量,则只要包含 block 运行即可。变量最常在堆栈上分配,并且当调整堆栈指针时,空间会在 block 末尾自动“释放”。
相反,如果您使用malloc()
,则通常在堆上分配空间。如果完成,您必须自己管理它,通过 free()
将其返还。
所以,从字面上回答你的问题,不,char string[100];
确实不通过malloc( )
。因此不需要调用free()
,否则会出错。
关于c - char string[100] 和 char *string = malloc(100) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154387/