1樓:80晴天
用函式返回值來傳遞動態記憶體這種方法雖然好用,但是常常有人把return 語句用錯
了。這裡強調不要用return 語句返回指向「棧記憶體」的指標,因為該記憶體在函式結束時
自動消亡,如下例:
char *getstring(void)void test4(void)
解決方法兩種:
1函式返回值來傳遞動態
記憶體函式返回值來傳遞動態記憶體:
char *getmemory3(int num)void test3(void)
2指向指標的指標:
void getmemory2(char **p, int num)void test2(void)
這兩種方法都可以,你可以試一下。
2樓:匿名使用者
對,因為p是區域性變數,函式結束後就銷燬了,改這樣就行了#include
char *getmemory(char* p)int main()
3樓:匿名使用者
錯誤1:你要回顯的字串是在函式中定義的,而函式在呼叫完後,是會被釋放記憶體的,也就是說 "hello word" 是會被破壞的。
錯誤2:不知道錯誤,我把main函式全刪除了,**重新敲進去,並把字串放main函式中:
#include
char *getmemory(char *p)int main()
編譯執行,完全沒問題
4樓:炫心吾動之夜愛
你的錯誤在15行,我看了程式還不到15行,說明15行中的非法字元,但卻沒有顯示,你將游標移到15行後,刪除這一個,試試再說吧。另外你的程式中我認為有幾處是沒用的,給你改進了一下,你覺得如何?
#include
char *getmemory()
main()//int可以省略
5樓:
確實因為p是區域性變數
當函式呼叫、執行結束後,它所申請的資源將被釋放掉,返回的指標就不能指向期望的內容。
如果p是全域性變數,並在開始就初始化,就不會存在問題。
6樓:龍戰於淵
#include
char *getmemory(void)int main()
這樣就可以了~用指標指向動態分配的記憶體,不要用陣列
7樓:薔懋
應該是的
這樣應該可以
#include
char s="hello word";
char *getmemory(void)int main()
8樓:匿名使用者
char *getmemory(void)
這是什麼東西,沒有引數就直接寫括號,別做多餘的動作。
9樓:匿名使用者
定義為二級指標可以解決這個問題~
10樓:匿名使用者
函式返回的是陣列的首地址
而你要列印出一個字串
所以出問題
成員變數和區域性變數區別,Java中,成員變數和區域性變數的區別是什麼?
樓主是否對類的概念已經清楚了?如果是的話,就很好解釋了。成員變數是類的一個組成部分,和類的方法處於同一級別 而區域性變數是為了讓方法 功能正常執行設立的一些臨時儲存單元,是專門服務於方法的。從概念上說,兩者是完全沒有關係的,但從應用上說,成員變數可能臨時做為區域性變數存在,而區域性變數也可能依賴或者...
C語言中,全域性變數與區域性變數同名時,以哪個為準
秋涵佴煊 在區域性變數的作用域內時,當做區域性變數,否則當作全域性變數 在定義區域性變數所在的範圍內,以區域性變數為準,否則就是全域性變數了 亓官學岺闢子 全域性變數是使用相同的記憶體塊在整個類中儲存一個值.全域性變數的存在主要有以下一些原因 1,使用全域性變數會佔用更多的記憶體 因為其生命期長 不...
axure 8 0怎麼設定區域性變數
站著的氣球 區域性變數local variable 預設顯示名稱lvar1,lvar2 作用範圍為一個case裡面的一個事務,一個事件裡面有多個case,一個case裡面有多個事務,可見區域性變數的作用範圍非常小。例如在case裡面要設定一個條件的話,如果用到了區域性變數,這個變數只在這個條件語句裡...