[問題] 關於新手十戒的小問題
請位各位, 在新手十誡(6)中提到:
"不可以在函式中回傳一個指向區域性自動變數的指標。否則,會得到垃圾值"
但我作了以下的實驗
實驗一:
定義typedef struct Obj
Obj* createInstance() {
Obj* tmp = (Obj*)malloc(sizeof(Obj));
return tmp;
}
然後在main()裡宣告Obj* obj1 = createInstance()
這樣雖然函式回傳區域性指標, 但是程式還是運作正常
實驗二:
定義typedef struct Obj
void createInstance(Obj* obj) {
if (obj == NULL) {
obj = (Obj*)malloc(sizeof(Obj));
}
return;
}
然後在main裡宣告Obj* obj = NULL;
createInstance(obj);
實驗二中我用動態配置asign適當大小的記憶體給一個非區域變數,
沒有回傳區域變數的指標,
程式卻出現core dump(估計是記憶體被回收了)
請問這是怎麼回事呢?
我原本以為實驗一會失敗, 實驗二會成功,結果卻相反
麻煩各位幫忙解惑了, 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.39.129
推
10/31 12:38, , 1F
10/31 12:38, 1F
推
10/31 12:46, , 2F
10/31 12:46, 2F
→
10/31 12:46, , 3F
10/31 12:46, 3F
推
10/31 12:50, , 4F
10/31 12:50, 4F
推
10/31 12:52, , 5F
10/31 12:52, 5F
→
10/31 12:58, , 6F
10/31 12:58, 6F
→
10/31 12:58, , 7F
10/31 12:58, 7F
→
10/31 12:59, , 8F
10/31 12:59, 8F
→
10/31 13:00, , 9F
10/31 13:00, 9F
推
10/31 13:38, , 10F
10/31 13:38, 10F
→
10/31 13:38, , 11F
10/31 13:38, 11F
→
10/31 17:04, , 12F
10/31 17:04, 12F
※ 編輯: hn12303158 來自: 122.116.39.129 (10/31 17:13)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章