開始認為:想看下在出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掉。