c - char string[100] 和 char *string = malloc(100) 的区别
问题描述
如果它确实分配了内存,为什么你不必释放字符串?
就像你这样做:
char *string;
string = malloc(100);
它是否可能在某些方面有所不同,因为char[100]
它是静态的,而另一种方式是动态的?
解决方案
char string[100];
只要变量存在,就分配内存。
如果它是静态变量,则只要程序运行。变量在bss
ordata
段(或rodata
编译器-链接器系统认为合适的任何其他段)中静态分配。
如果它是动态(C 标准中的“自动”)变量,则只要包含块运行。变量最常分配在堆栈上,当堆栈指针调整时,空间会在块的末尾自动“释放”。
相反,如果你使用malloc()
的空间通常分配在堆上。free()
如果你完成了,你必须自己管理它。
所以,从字面上回答你的问题,不,char string[100];
不会通过. 因此无需调用,这将是一个错误。malloc()
free()
推荐阅读
- javascript - Google 电子表格脚本 - 如何将范围从一张纸复制到另一张纸,但不覆盖非空目标单元格
- python - 按顺序收集来自不同进程的数组
- javascript - 我想要选中复选框的同一行的数据。我的表格行在 for 循环中
- azure - Azure 密钥库还原
- python - 如何获取每个文件的目录名称?
- reactjs - 新用户登录后 Apollo/GraphQL 不进行查询?
- php - 在 PhpStorm 中启用 Xdebug
- javascript - 如何从我的反应应用程序中删除所有会话 cookie?
- sql - 如何更新参考预言机
- sql - SQL FOR JSON:为每个对象创建行