【问题标题】:The difference between char string[100] and char *string = malloc(100) [duplicate]char string[100] 和 char *string = malloc(100) 的区别 [重复]
【发布时间】:2020-01-28 22:49:42
【问题描述】:

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

如你所愿:

char *string;
string = malloc(100);

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

【问题讨论】:

    标签: c pointers malloc dynamic-memory-allocation


    【解决方案1】:

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

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

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

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

    所以,从字面上回答你的问题,char string[100]; 确实通过malloc() 分配内存。因此无需调用free(),会报错。

    【讨论】:

    • 在C标准中,没有链接的非静态对象的存储时长称为“自动”,而不是“动态”。
    • @EricPostpischil 感谢您指出这一点,我已经编辑了答案。措辞就像问题中一样。 :-}
    猜你喜欢
    • 2011-04-21
    • 2020-06-26
    • 1970-01-01
    • 2014-07-14
    • 2012-03-16
    • 2021-04-10
    • 1970-01-01
    • 2012-05-12
    • 2017-12-23
    相关资源
    最近更新 更多