游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2543|回复: 8

请问这个程序究竟错在哪里??!!

[复制链接]

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2003-12-19 12:07:00 | 显示全部楼层 |阅读模式
……
const int sub=16383;
int * array = new int [sub];
for(int i=0;i<sub;i++)
{
       array=i*2+1;
}
……
当sub==16383、32767……65535(也就是2的n次-1时,n>=14),在Release版本中一定会非法操作,而在debug版中则不会,请问这是为什么呢???
VS.Net2002,WinXP b.2600.

6

主题

74

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2003-12-19 13:33:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

我用vc6测一下,没有问题,是编译器的bug吧。
在release 下加 _asm int 3 调试一下

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-19 19:43:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

哦??!
?麽好啊,我??……

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-20 13:28:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

唉……不行!
看来是编译器的错了
我int 3了,但是继续以后竟然好使,直接运行就是不好使!!!!
大家有没有用VS.Net2003试过的?希望2003好使

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2003-12-20 13:58:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

2002 XP,没有任何问题
这个程序,本身也没有任何问题

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-20 17:14:00 | 显示全部楼层

这么的再试试!!

没有问题?
那么试试这个:
class Waste
{
public:
        int a;
        int b;
        int c;
        int d;
        int _a,_b,_c,_d;
};
main()
{
        Waste * wasteMem;
        wasteMem=new Waste[16383];//2^n-1,n>=14
        int w=0;
        for(w=0;w<16383;w++)
        {
                wasteMem[w]._a=w;
                wasteMem[w]._b=w+2;
                wasteMem[w]._c=w++;
                wasteMem[w]._d=w--;
                wasteMem[w].a=w-(w-1);
                wasteMem[w].b=548;
                wasteMem[w].c=999;
                wasteMem[w].d=23290;
        }//随便设的
}
……
现在再看看……要是还没毛病,那我……

6

主题

74

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2003-12-22 13:10:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

这两个
                wasteMem[w]._c=w++;
                wasteMem[w]._d=w--;
当w到达最后一个值(16382)时
w++将其变为16383 这时 wasteMem[w]._d=w--;
就数组越界了。可改为wasteMem[w]._d=--w;

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-24 19:11:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

感谢fdyjfd使我明白了什么叫认真认真再认真!!!

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2003-12-24 19:13:00 | 显示全部楼层

Re:请问这个程序究竟错在哪里??!!

我改成了:
wasteMem[w]._c=w+1;
wasteMem[w]._d=w-1;
这样w就不会跟着变了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 21:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表