【发布时间】:2018-02-07 09:39:08
【问题描述】:
所以我有这段代码,其中分配发生在一个函数中,而解除分配正在调用函数中完成。尝试通过 ptr 或 *ptr 释放内存时收到分段错误或 Abort 消息。请看:
#include <stdio.h>
int main()
{
char *ptr;
fun(&ptr);
printf("ptr = %p\n",ptr);
printf("&ptr = %p\n",&ptr);
printf("String ptr = %s\n",ptr);
free (ptr);
return 0;
}
void fun(char **str)
{
*str = malloc(10);
*str = "HELLO";
printf("str = %p\n",str);
printf("&str = %p\n",&str);
printf("String str = %s\n",*str);
}
以下是输出:
str = 0x7ffe63247858
&str = 0x7ffe63247838
String str = HELLO
ptr = 0x400764
&ptr = 0x7ffe63247858
String ptr = HELLO
*** Error in `/home/a.out': munmap_chunk(): invalid pointer: 0x0000000000400764 ***
Aborted
问题:
为什么我们不能释放 ptr ?如果可以,最好的方法是什么?
【问题讨论】:
-
@ThiruShetty 实际上这不是问题(见答案)