作者:
DirKai (Dirk_AI(MIX))
2014-10-16 12:18:17各位大大好
小弟在;windows 使用Dev c++
寫C遇到一個問題
配置動態二微陣列都會出錯
感覺是配製太大 所以當掉
unsigned long **horizontal;
unsigned long i, j;
horizontal=(unsigned long **)malloc(5*sizeof(unsigned long*));
for(i=0; i<5; i++)
horizontal[i]=(unsigned long *)malloc(400*sizeof(unsigned long));
如果改成300就沒問題
是不是因為unsigned long 所以爆掉了?
可是算一算 400*5 bytes 不是約2mb嗎?
為什麼會當? 或是我誤解甚麼了?
反過來配置就不會有問題
horizontal=(unsigned long **)malloc(400*sizeof(unsigned long*));
for(i=0; i<5; i++)
horizontal[i]=(unsigned long *)malloc(5*sizeof(unsigned long));
為什麼@@??
有其他方法嗎?
你在可以放5個指標的空間塞400個指標當然當300沒當只是剛好而已反過來400個指標的空間塞5個當然沒問題
上面for(i=0;i<5;i++) 就不會當了吧
400x5約2MB?一個長度1K 全世界最大的unsigned long
作者: Williamxxx ( 2 1 4 8 3) 2014-10-16 15:15:00
malloc(5*sizeof(unsigned long*));改為unsigned long你的sizeof是求一個指向unsigned long型態指標的大小不對 我看錯了
作者:
ppc ( )
2014-10-16 16:55:00能貼完整的code更好
通常這幾行沒動卻修好了都是因為其他地方有非法存取例如超過陣列邊界之類的未定義行為
作者:
xpride (陳ㄚ智)
2014-10-16 18:01:00你的malloc沒有問題 錯的是你其他的code你都不使用中斷點去追踨code嗎??