ANSI C - 为什么 malloc 和 free 不适用于 char 指针?

ANSI C - Why malloc and free dont work for char pointers?

当我尝试 运行 此代码时:

char *s;
s = (char *) malloc (15);
s = "hello world";
free(s);

使用 gcc ts.c -ansi -Wall 结果是:

free(): invalid pointer
Aborted (core dumped)

警告是:

‘free’ called on a pointer to an unallocated object 

我不明白为什么 char 指针与其他指针不同。

这段代码

char *s;
s = (char *) malloc (15);
s = "hello world";

产生内存泄漏。

一开始动态分配了一块内存,地址赋值给指针s

s = (char *) malloc (15);

然后指针 s 被重新分配了字符串文字第一个字符的地址

s = "hello world";

其实上面的语句等价于

s = &"hello world"[0];

字符串文字具有静态存储持续时间。因此,您可能无法将函数 free 应用于字符串文字。

而不是这个作业

s = "hello world";

您需要使用 header <string.h>

中声明的标准字符串函数 strcpy
#include <string.h>

//...

strcpy( s, "hello world" );