C語言筆記-指標(4)-函數返回的陷阱

函數可以回傳指標,會有陷阱存在,過往經驗不足的時候也有吃過鱉:



#include <assert.h>
#include <stdio.h>

typedef struct powers{
 double base,square,cube;
}powers;

powers get_power(double in){
 powers out={
  .base=in,
  .square=in*in,
  .cube=in*in*in
  };
 return out; 
}

int *get_even(int count){
 int out[count];
 for(int i=0;i<count;i++)
  out[i]=2*i;
 return out; //埋下問題
}


int main(){
    powers threes=get_power(3);
    int *evens=get_even(3);
    printf("threes:%g\t%g\t%g\n",threes.base,threes.square,threes.cube);
    printf("evens: %i\t%i\t%i\n",evens[0],evens[1],evens[2]);
}


執行2次:


原因出函式退出時,陣列內容的內存會被釋放,但指標一然會回傳
不過通常編譯器都會提出警告!

此文章內容參考"21 century c"一書,在此做筆記
如須刪除請告知 謝謝



這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

MCU的硬體基礎知識(2) 電晶體的應用