malloc不存在物理地址错误

时间:2014-09-14 08:41:52

标签: c string malloc

我试图弄清楚如何在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")的好处是能够编辑我的字符串的内容。

谢谢!

3 个答案:

答案 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");

您需要包含相应的头文件