【发布时间】:2020-01-28 22:49:42
【问题描述】:
如果它确实分配了内存,为什么你不必释放字符串?
如你所愿:
char *string;
string = malloc(100);
因为char[100] 是静态的而另一种方式是动态的,它是否可能在某些方面有所不同?
【问题讨论】:
标签: c pointers malloc dynamic-memory-allocation
如果它确实分配了内存,为什么你不必释放字符串?
如你所愿:
char *string;
string = malloc(100);
因为char[100] 是静态的而另一种方式是动态的,它是否可能在某些方面有所不同?
【问题讨论】:
标签: c pointers malloc dynamic-memory-allocation
char string[100]; 只要变量存在就分配内存。
如果它是一个静态变量,只要程序运行。该变量在bss 或data 段(或rodata 或编译器链接器系统认为合适的任何其他段)中静态分配。
如果它是一个动态(C 标准中的“自动”)变量,只要包含块运行。变量最常分配在堆栈上,当堆栈指针调整时,空间会在块的末尾自动“释放”。
相反,如果您使用malloc(),则通常在堆上分配空间。如果你完成了,你必须自己管理它,通过free()返回它。
所以,从字面上回答你的问题,否,char string[100]; 确实不通过malloc() 分配内存。因此无需调用free(),会报错。
【讨论】: