看板 C_and_CPP 關於我們 聯絡資訊
最近遇到一個問題想請教各位 如果今天我們程式要開十張圖 但不知道圖的大小 一般的寫法可能是是 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)
diabloevagto:第二個的image[0]已經是一個array了,你不能給他poin 06/20 16:48
diabloevagto:ter,你要給值的話只能一個一個給,或是memcopy 06/20 16:49
diabloevagto:我覺得是這個原因,如果有錯請指教 06/20 16:49
shadow0326:我覺得這樣用沒問題啊,可以給一個會crash的code嗎? 06/20 16:57
bibo9901:我測了一下也沒問題@@ 06/20 17:00
hichcock:我也覺得應該沒問題, 這樣的 code 滿常見的 06/20 17:05
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)
shadow0326:程式滿大的我只稍微看一下mipmap附近的code 給個小推測 06/20 18:05
shadow0326:如果宣告成*mipmap[10]的話,根據1679行,只有0~level 06/20 18:07
shadow0326:會指向有建構的內容,level+1 ~ 9的部分是未初始的指標 06/20 18:08
shadow0326:萬一不小心誤用到就炸了 當然可能不是這原因 隨便猜猜 06/20 18:08
shadow0326:還有我不小心看到1667行把<寫成<= 06/20 18:09
天哪,感謝這位大大! 真正的問題原來是出在這裡....orz 改掉這個原本的也可以跑了XD ※ 編輯: Trumen 來自: 140.112.48.126 (06/20 18:32)
diabloevagto:抱歉~_~差點誤導別人,學藝不精Orz 06/20 20:09
james732:樓上快去買新筆電 06/20 20:10
diabloevagto:J大換了新手機,要不要順便換ssd xd 06/20 21:13
james732:我的桌電早就換SSD了~XD 06/21 08:59
diabloevagto:ssd超貴...用起來真的會比較快嗎= = 06/21 11:10
james732:超快的~XD 而且最近其實一直在降價 06/21 11:48