我写了以下程序:
#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返回的吗?
提前致谢!
答案 0 :(得分:5)
是不是因为在调用malloc之后,s收到了某个地址, 并且赋值s =“Hello World”修改s的地址,但是 然后在执行free(s)时,发送到free的指针不是 一个由malloc返回的?
是
s = (char*)malloc(15);
s = "Hello World";
您正在覆盖malloc
(内存泄漏)的返回地址
如果参数与先前返回的指针不匹配 calloc(),malloc(),posix_memalign(),realloc()或strdup()函数, 或者如果通过调用free()或realloc()释放空间, 行为未定义。
将s = "Hello World";
更改为strcpy(s, "Hello world");