C語言的坑 函式返回區域性變數

2021-10-01 21:22:25 字數 1278 閱讀 8974

#include

char

*tochinese

(char c)

;return num[c-

'0']

;//num是區域性變數,函式結束時,記憶體釋放,會返回空

}int

main()

#include

#include

#include

char

*tochinese

(char c)

;char

* s =

malloc(5

);strcpy

(s, num[c -

'0']);

return s;

}int

main()

#include

char

*returnstr()

intmain()

因為"hello world!"是乙個字串常量,存放在唯讀資料段,把該字串常量存放的唯讀資料段的首位址賦值給了指標,所以returnstr函式退出時,該該字串常量所在記憶體不會被**,故能夠通過指標順利無誤的訪問。

#include

char

*returnstr()

intmain()

"hello world!"是區域性變數存放在棧中。當returnstr函式退出時,棧要清空,區域性變數的記憶體也被清空了,所以這時的函式返回的是乙個已被釋放的記憶體位址,所以有可能列印出來的是亂碼。

int

func()

int*

func()

#include

char

*returnstr()

intmain()

int

*func

(void

)

char

*tochinese

(char c)

;char

* s =

malloc(5

);strcpy

(s, num[c -

'0']);

return s;

}

這裡有個問題,malloc申請的動態記憶體,不態好釋放(free釋放)

C語言 返回區域性變數

一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...

C 函式返回區域性變數

原因 返回值是拷貝值,區域性變數的作用域為函式內部,函式執行結束,棧上的區域性變數會銷毀,記憶體釋放。可返回的區域性變數 1.返回區域性變數本身 int sum int a,int b 2.常量 char returnvalue warning deprecatedconversion from s...

C 函式返回區域性變數

目錄2 可返回的區域性變數 示例 int get 或 char getmemory void 示例 int sum int a,int b 常量 char getmemory void 示例 const char getmemory void 或者int returnvalue return val...