天天看點

10.坑-千萬别把局部變量的指針作為函數的傳回值

#include <stdio.h>
#include <string.h>
int * getarr(int * ipt);
int  main()
{
    int a = 99;
    char * ch ;

    int *p = getarr(&a);
    //gets(ch);
    printf("%d\n", *p );
    /*
    坑:将局部變量a的pointer作為傳回值傳回
        後果:函數執行完畢後會釋放記憶體,銷毀函數内定義的局部變量、局部數組、形式參數
        這裡的銷毀并不是把記憶體抹掉,而是釋放記憶體空值權,當有其他資料要使用此記憶體時,會被占用
        情況1:調完getarr後沒有任何操作,那麼傳回的指針指向的是a
        情況2:調完getarr後有其他操作,其他操作産生的資料可能會占用a的記憶體
    */
   
}
int * getarr(int * c)
{
  int a = 100;
  return &a;
}