我试图弄清楚如何在C中正确使用malloc,并遇到了一个我遇到问题的错误。
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
char * str;
str = (char *)malloc(10);
str = "Hello World";
str[0] = 'R';
return EXIT_SUCCESS;
}
我的Valgrind输出:
==23136== Process terminating with default action of signal 10 (SIGBUS)
==23136== Non-existent physical address at address 0x100000F92
==23136== at 0x100000F66: main (test.c:12)
我知道这个问题是由于我试图分配字母&#39; R&#39;到str
,但我的印象是在这种情况下使用malloc
(而不是char str[10] = "Hello World"
)的好处是能够编辑我的字符串的内容。
谢谢!
答案 0 :(得分:4)
str = "Hello World";
使str
指向一个常量字符串“Hello World”,并且你使用malloced的内存将成为内存泄漏。
答案 1 :(得分:1)
您从strcpy
复制<string.h>
的字符串,而不是重新指定指针。
但请注意目标缓冲区实际上将保留strlen(source) + 1
个字符(0-terminator)。 "Hello World"
是11 + 1。
此外,尝试修改不正确分配的字符串文字是UB。
无论如何,Don't cast the result of malloc (and friends)。
最后,return EXIT_SUCCESS
是多余的(因为C99 main
最后有一个隐含的return 0;
。
答案 2 :(得分:0)
您丢弃了malloc
的返回值。而是将其设置为只读存储器中的值
尝试替换
str = "Hello World";
与
strcpy(str, "Hello World");
您需要包含相应的头文件