[问题] malloc 太大吗?

楼主: 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));
为什么@@??
有其他方法吗?
作者: azureblaze (AzureBlaze)   2014-10-16 12:21:00
你在可以放5个指标的空间塞400个指标当然当300没当只是刚好而已反过来400个指标的空间塞5个当然没问题
作者: singlovesong (~"~)   2014-10-16 12:22:00
上面for(i=0;i<5;i++) 就不会当了吧
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-10-16 14:59:00
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更好
作者: shadow0326 (非议)   2014-10-16 17:58:00
通常这几行没动却修好了都是因为其他地方有非法存取例如超过阵列边界之类的未定义行为
作者: xpride (陈ㄚ智)   2014-10-16 18:01:00
你的malloc没有问题 错的是你其他的code你都不使用中断点去追踨code吗??

Links booklink

Contact Us: admin [ a t ] ucptt.com