ant*_*nio 2 c string malloc free constants
我有这个代码:
#define ABC "abc"
void main()
{
char *s = malloc(sizeof(char)*3);
printf("%p ", s);
s = ABC;
printf("%p ", s);
free(s);
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
0x8927008 0x8048574 Segmentation fault (core dumped)
正如您所看到的,字符串s的地址在赋值后会发生变化(我认为这就是free()给出segfault的原因).谁能解释我为什么以及如何发生这种情况?谢谢!
这条线
s = ABC;
Run Code Online (Sandbox Code Playgroud)
更改s为指向可能位于只读内存中的其他字符串.尝试释放此类内存会导致未定义的行为.可能会崩溃.
我想你想要的
strcpy(s, ABC);
Run Code Online (Sandbox Code Playgroud)
代替.这会将char数组"abc"复制到s.请注意,这将导致进一步的错误 - s太短,并且在末尾没有空间用于nul终止符ABC.将分配更改为4个字节以解决此问题
char *s = malloc(4);
Run Code Online (Sandbox Code Playgroud)
或使用
char *s = malloc(sizeof(ABC));
Run Code Online (Sandbox Code Playgroud)
if ABC是您要存储的最大长度.