开始认为:想看下在出main函数外的其他函数内,用malloc给一个从main函数传进来的指针分配内存,看下该指针是否可以返回,因为它相当于是局部申明的。
代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
int* fun(int* a,int len)
{
printf("a:%d\n",a);
int b[10] = {1,2,3,4,5,6,7,8,9,0};
int i;
a = (int*)malloc(len*(sizeof(int)));
printf("a:%d\n",a);
memcpy(a,b,10*(sizeof(int)));
printf("%d\n",a[1]);
return a;
}
int main(void)
{
int* test;
int len = 10;
printf("test:%d\n",test);
test = fun(test,len);
printf("%d\n",test[2]);
printf("test:%d\n",test);
free(test);
return 0;
}
结果:
test:-1217622016
a:-1217622016
a:162156552
2
3
发现,指针传进去的时候,它的地址是没有变化的,后来有内存分配后就变了,我想应该是因为它是在堆里的内存分配,所以已经和前面的a不同了,不再是一个局部指针,也就可以返回回去。(如果理解有误,请指正)。然后再在main函数中将堆里面分配那段内存free掉。