看板 Soft_Job 關於我們 聯絡資訊
: Q: 下面這段程式有沒有什麼問題? : void fun(int* ptr) : { : ptr = new int[2]; : } : int main() : { : int *ptr = NULL; : fun(ptr); : ptr[1] = 1; : ptr[2] = 2; : printf("%d %d", ptr[1], ptr[2]); : return 0; : } 突然發現 這個題目我也不會! 換成是我的話 我會回答p[1]=1, p[2]=2這二行有問題 這個陣列可以這樣做嗎? 程式會出現問題 過去六年是白工作了 原來我也是不會C++的那一群 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.198.163
blackj0311:ptr is still NULL in main() 06/29 14:24
kenzou:題目就錯了,我會回答segmentation fault。 06/29 15:09
neigence:只能說你運氣好 沒寫到會碰到這種問題的程式吧 06/29 16:33
QQ29:改成 fun(int *&);就對了 06/29 19:58
piss:如果現實有人寫這樣的code,應該很難maintain… 06/29 21:36
khalid:這比較算是C吧 06/29 21:42
y2k27:這種問題交給compile就好了 06/29 23:38
Huangs:改成 fun(int *&) 還是錯。不能用到 p[2] 的位址 06/30 00:05
Huangs:這種問題 compiler 不一定抓得出來啊 交給compiler?? 06/30 00:07
y2k27:compiler抓不出來的蟲, 是寫的那個人有問題 06/30 00:45
y2k27:硬要去抓這種蟲, 不如避免搞出這種蟲 06/30 00:46
y2k27:這是兩個獨立的ptr, 指向同一個int array. 06/30 01:05
y2k27:function call傳過去的是位址, 兩個指標是獨立 06/30 01:06
xsion:1.這是純C 2.compiler抓不到,頂多會有warring 06/30 09:43
lalawugaga:這不是純C.. C是沒有new的 06/30 10:52
prag222:new是建立物件的方法 06/30 12:53
kerickuo:這並不是純C 好嗎... 06/30 13:25
joshux:fun(ptr)沒有改到ptr的值 ptr還是NULL 06/30 20:28
Cloud:void fun(int** ptr){*ptr = new int[2];} 06/30 20:51
Cloud:fun( &ptr); 其實這蠻常見的,compiler也不會幫你 06/30 20:52
QQ29:[2]....竟然沒看到 真好笑= = 07/01 00:06