c - char string[100] 和 char *string = malloc(100) 之间的区别

标签 c pointers malloc dynamic-memory-allocation

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

如果你这样做的话,就像你会做的那样:

char *string;
string = malloc(100);

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

最佳答案

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

如果它是静态变量,则只要程序运行即可。该变量在 bssdata 段(或 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/

相关文章:

C冲突类型错误

c - 为什么 Valgrind 报告在 PETSc 中分配 char* 时大小为 8 的无效写入?

c - 在 C 中使用逻辑运算符切换大小写

C - Malloc 导致程序崩溃

无法复制使用字符串时 malloc 未初始化内存的示例

c - 字符串分词器 - 验证数组的奇怪行为

c - 如何将系统(命令)输出打印到文件C?

pointers - 复制包含指向 CUDA 设备的指针的结构

c++ - 你如何使用映射值?

pointers - Golang指针反向链表混淆