为什么我收到此错误以及如何解决此问题:munmap_chunk():无效指针:0x0000000000400694 *** Hello WorldAborted

时间:2017-02-25 09:47:29

标签: c string dynamic-memory-allocation

我写了以下程序:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *s;
        s = (char*)malloc(15);
        s = "Hello World";
        printf("%s",s);
        free(s);
        return 0;
  }

没有编译错误。 我得到这个运行时错误: *`./s'出错:munmap_chunk():指针无效:0x0000000000400694 * Hello WorldAborted

为什么我会收到此运行时错误,如何解决? 是因为在调用malloc之后,s收到了某个地址,并且赋值s =“Hello World”修改了s的地址,但是当执行free(s)时,发送给free的指针不是那个那是由malloc返回的吗?

提前致谢!

1 个答案:

答案 0 :(得分:5)

  

是不是因为在调用malloc之后,s收到了某个地址,   并且赋值s =“Hello World”修改s的地址,但是   然后在执行free(s)时,发送到free的指针不是   一个由malloc返回的?

    s = (char*)malloc(15);
    s = "Hello World";

您正在覆盖malloc(内存泄漏)的返回地址

free()

  

如果参数与先前返回的指针不匹配   calloc(),malloc(),posix_memalign(),realloc()或strdup()函数,   或者如果通过调用free()或realloc()释放空间,   行为未定义。

s = "Hello World";更改为strcpy(s, "Hello world");

另外,请查看Do I cast the result of malloc?