Re: [心得] 程式設計師應該懂多少?

看板Soft_Job作者 (dancewithwho)時間15年前 (2009/06/29 13:14), 編輯推噓14(1407)
留言21則, 14人參與, 最新討論串20/23 (看更多)
: 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

06/29 14:24, , 1F
ptr is still NULL in main()
06/29 14:24, 1F

06/29 15:09, , 2F
題目就錯了,我會回答segmentation fault。
06/29 15:09, 2F

06/29 16:33, , 3F
只能說你運氣好 沒寫到會碰到這種問題的程式吧
06/29 16:33, 3F

06/29 19:58, , 4F
改成 fun(int *&);就對了
06/29 19:58, 4F

06/29 21:36, , 5F
如果現實有人寫這樣的code,應該很難maintain…
06/29 21:36, 5F

06/29 21:42, , 6F
這比較算是C吧
06/29 21:42, 6F

06/29 23:38, , 7F
這種問題交給compile就好了
06/29 23:38, 7F

06/30 00:05, , 8F
改成 fun(int *&) 還是錯。不能用到 p[2] 的位址
06/30 00:05, 8F

06/30 00:07, , 9F
這種問題 compiler 不一定抓得出來啊 交給compiler??
06/30 00:07, 9F

06/30 00:45, , 10F
compiler抓不出來的蟲, 是寫的那個人有問題
06/30 00:45, 10F

06/30 00:46, , 11F
硬要去抓這種蟲, 不如避免搞出這種蟲
06/30 00:46, 11F

06/30 01:05, , 12F
這是兩個獨立的ptr, 指向同一個int array.
06/30 01:05, 12F

06/30 01:06, , 13F
function call傳過去的是位址, 兩個指標是獨立
06/30 01:06, 13F

06/30 09:43, , 14F
1.這是純C 2.compiler抓不到,頂多會有warring
06/30 09:43, 14F

06/30 10:52, , 15F
這不是純C.. C是沒有new的
06/30 10:52, 15F

06/30 12:53, , 16F
new是建立物件的方法
06/30 12:53, 16F

06/30 13:25, , 17F
這並不是純C 好嗎...
06/30 13:25, 17F

06/30 20:28, , 18F
fun(ptr)沒有改到ptr的值 ptr還是NULL
06/30 20:28, 18F

06/30 20:51, , 19F
void fun(int** ptr){*ptr = new int[2];}
06/30 20:51, 19F

06/30 20:52, , 20F
fun( &ptr); 其實這蠻常見的,compiler也不會幫你
06/30 20:52, 20F

07/01 00:06, , 21F
[2]....竟然沒看到 真好笑= =
07/01 00:06, 21F
文章代碼(AID): #1AI4tE7S (Soft_Job)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 20 之 23 篇):
文章代碼(AID): #1AI4tE7S (Soft_Job)