游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2305|回复: 7

我new的数组不知为何多了一个!

[复制链接]

21

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
QQ
发表于 2007-7-2 11:16:00 | 显示全部楼层 |阅读模式
使在delete[] m_CellLayerOne;时报错

**********************************************
struct stCell{
unsigned Pic:6;
unsigned Num:14;
unsigned res:4;
};


***********************************************
在给m_CellLayerOne里面赋值前会把它清成统一的数:

//n=336;
        for( int i=0; i<n; i++ )
        {
                m_CellLayerOne.Pic = 63;
                m_CellLayerOne.Num = 2047;
        }

***********************************************


原本我只分配了336个stCell的空间,m_CellLayerOne应到335,但在delete[]时,m_CellLayerOne[336]中也有值,太郁闷了!!!!!!!!!!!!但是怎么也看不明白为什么,我不知道为什么会多出那么一个
m_CellLayerOn[336]!!!:


n = 336;

        stCell temp[400];               //记录用的
        if( m_CellLayerOne )
        for( int j=0; j<400; j++ )
        {
                temp[j].Pic = m_CellLayerOne[j].Pic;
                temp[j].Num = m_CellLayerOne[j].Num;
        }


        //层信息
        for( int i=0; i<n; i++ )
        {


                  //这里最是奇怪的,我单步执行时,一下一下F10时,i=335,temp[336]中
                 //正常(不是我一开始给我的初值)!!但一当我设断点一下子到i =335     时,temp[336]就不正常了(是我一开始的初值)

                if( i==335)
                {
                        for( int j=0; j<400; j++ )
                        {
                                temp[j].Pic = m_CellLayerOne[j].Pic;
                                temp[j].Num = m_CellLayerOne[j].Num;
                        }
                }
                fread( &m_CellLayerOne, 20, 1, fp );
                fread( &m_CellLayerTwo, 20, 1, fp );
                fread( &m_CellLayerThree, 20, 1, fp );
                fread( &m_EventLayer, 7, 1, fp );
        }

        if( m_CellLayerOne )
        for( int j=0; j<400; j++ )
        {
                temp[j].Pic = m_CellLayerOne[j].Pic;
                temp[j].Num = m_CellLayerOne[j].Num;
        }

//执行上面代码前temp[336].Pic = 61; temp[336].Num = 14327;
//执行过后temp[336].Pic = 63; temp[336].Num = 2047;



21

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
QQ
 楼主| 发表于 2007-7-2 11:18:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!

请大家帮帮忙,我对着代码看了好几天了,就是不知道为什么

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-7-2 11:47:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!


看你的代码看不出什么,贴出关键代码,你这些代码没有什么说服力·

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-7-2 20:02:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!

那你就看,
m_CellLayerOne[336].Pic = 63;
m_CellLayerOne[336].Num = 2047;
这样赋值后,看看会不会报错吧。

21

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
QQ
 楼主| 发表于 2007-7-3 09:24:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!

我这样写都不出错:
m_CellLayerOne[1400].Pic = 63;
m_CellLayerOne[1400].Num = 2047;

21

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
QQ
 楼主| 发表于 2007-7-3 09:27:00 | 显示全部楼层

Re: Re:我new的数组不知为何多了一个!

航天奇侠: Re:我new的数组不知为何多了一个!


看你的代码看不出什么,贴出关键代码,你这些代码没有什么说服力·



我在运行到这些代码时才发生的变化,所以我感觉这些就是关键的代码,这些代码没有问题吗?

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-7-3 13:16:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!

可以这样描述一下,指针的安全是程序员自己控制。

如果指针越界,但指向一个可写的内存地址,当然不会报错,但潜在的错误就很难预知了。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-7-3 20:56:00 | 显示全部楼层

Re:我new的数组不知为何多了一个!

m_CellLayerOne 是336,为什么你用400的循环读?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 23:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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