[問題] array of pointers (已解決)

看板C_and_CPP (C/C++)作者 (真好多人)時間14年前 (2012/06/20 16:45), 編輯推噓1(1016)
留言17則, 5人參與, 最新討論串1/1
最近遇到一個問題想請教各位 如果今天我們程式要開十張圖 但不知道圖的大小 一般的寫法可能是是 unsigned char **image; image = new unsigned char *[10]; for( int i=0; i<10; i++ ) image[i] = new unsigned char[image_size]; 不過昨天碰到有人寫成下面這種寫法 unsigned char *image[10]; for( int i=0; i<10; i++ ) image[i] = new unsigned char[image_size]; 但這樣程式就crash了 請問crash的原因是什麼呢? 是因為第二個image的每個pointer只能指向一個size大小的unsigned char嗎? (也就是不能new[],只能new()) 還是因為其他原因呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.48.126 ※ 編輯: Trumen 來自: 140.112.48.126 (06/20 16:46)

06/20 16:48, , 1F
第二個的image[0]已經是一個array了,你不能給他poin
06/20 16:48, 1F

06/20 16:49, , 2F
ter,你要給值的話只能一個一個給,或是memcopy
06/20 16:49, 2F

06/20 16:49, , 3F
我覺得是這個原因,如果有錯請指教
06/20 16:49, 3F

06/20 16:57, , 4F
我覺得這樣用沒問題啊,可以給一個會crash的code嗎?
06/20 16:57, 4F

06/20 17:00, , 5F
我測了一下也沒問題@@
06/20 17:00, 5F

06/20 17:05, , 6F
我也覺得應該沒問題, 這樣的 code 滿常見的
06/20 17:05, 6F
https://dl.dropbox.com/u/20933521/Software.rar 這是一份software 3d graphics pipeline的程式 目前是會crash的版本 (在release mode 不偵錯執行情況下) 不過如果將 Model.cpp line 1666 拿掉// definition.h line line 67的//換到line 68 也就是把*image[10]的寫法改成是**image 就可以跑了 ※ 編輯: Trumen 來自: 140.112.48.126 (06/20 17:31)

06/20 18:05, , 7F
程式滿大的我只稍微看一下mipmap附近的code 給個小推測
06/20 18:05, 7F

06/20 18:07, , 8F
如果宣告成*mipmap[10]的話,根據1679行,只有0~level
06/20 18:07, 8F

06/20 18:08, , 9F
會指向有建構的內容,level+1 ~ 9的部分是未初始的指標
06/20 18:08, 9F

06/20 18:08, , 10F
萬一不小心誤用到就炸了 當然可能不是這原因 隨便猜猜
06/20 18:08, 10F

06/20 18:09, , 11F
還有我不小心看到1667行把<寫成<=
06/20 18:09, 11F
天哪,感謝這位大大! 真正的問題原來是出在這裡....orz 改掉這個原本的也可以跑了XD ※ 編輯: Trumen 來自: 140.112.48.126 (06/20 18:32)

06/20 20:09, , 12F
抱歉~_~差點誤導別人,學藝不精Orz
06/20 20:09, 12F

06/20 20:10, , 13F
樓上快去買新筆電
06/20 20:10, 13F

06/20 21:13, , 14F
J大換了新手機,要不要順便換ssd xd
06/20 21:13, 14F

06/21 08:59, , 15F
我的桌電早就換SSD了~XD
06/21 08:59, 15F

06/21 11:10, , 16F
ssd超貴...用起來真的會比較快嗎= =
06/21 11:10, 16F

06/21 11:48, , 17F
超快的~XD 而且最近其實一直在降價
06/21 11:48, 17F
文章代碼(AID): #1FuOsQ1V (C_and_CPP)
文章代碼(AID): #1FuOsQ1V (C_and_CPP)