首页 > 解决方案 > char string[100] 和 char *string = malloc(100) 的区别

问题描述

如果它确实分配了内存,为什么你不必释放字符串?

就像你这样做:

char *string;
string = malloc(100);

它是否可能在某些方面有所不同,因为char[100]它是静态的,而另一种方式是动态的?

标签: cpointersmallocdynamic-memory-allocation

解决方案


char string[100];只要变量存在,就分配内存。

如果它是静态变量,则只要程序运行。变量在bssordata段(或rodata编译器-链接器系统认为合适的任何其他段)中静态分配。

如果它是动态(C 标准中的“自动”)变量,则只要包含块运行。变量最常分配在堆栈上,当堆栈指针调整时,空间会在块的末尾自动“释放”。

相反,如果你使用malloc()的空间通常分配在堆上。free()如果你完成了,你必须自己管理它。

所以,从字面上回答你的问题char string[100];不会通过. 因此无需调用,这将是一个错误。malloc()free()


推荐阅读