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" );
当我尝试 运行 此代码时:
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" );