【发布时间】:2012-11-24 14:09:47
【问题描述】:
我不明白为什么整个事情都不起作用。
我只想在函数func 中做malloc,当我从它返回时,malloc 消失了......我得到了
* 检测到 glibc ./test: free(): invalid pointer: 0xb76ffff4 **
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int func(char *p) {
p=(char*)malloc(1);
*p='a';
printf("1. p= %c\n",*p);
return 0;
}
int main()
{
char *p;
func(p);
printf("2. p= %c\n",*p);
free(p);
return 0;
}
【问题讨论】:
-
您正在尝试释放无效指针。
p只是指针的副本。 -
C 是call by value,有一个怪癖,当您将数组传递给函数时,它们会变成指针。
-
通常在 C 中分配内存,然后传递给使用它的函数,然后在分配它的同一个函数中释放内存。