tempad
ReadyGo!技术成就梦想 >>ASP.NET技术 >> 菜菜菜菜鸟关于内存一小问!

菜菜菜菜鸟关于内存一小问!

ReadyGo!技术成就梦想 网络搜索 efish 2008-1-16 1:35:41

菜菜菜菜鸟关于内存一小问!

楼主ajun21century(海落鹰)2001-09-02 20:44:10 在 C++ Builder / 基础类 提问

各位大虾,小弟编程试遇到一个问题,程序编译通过一点问题没有,但是关闭窗体的时候提示某段指令引用的某段内存不能为read,我在formclose事件里已经释放了数组的内存和应该释放的对象变量,为什么会这样呢? 问题点数:0、回复次数:13Top

1 楼little_f(小毛)回复于 2001-09-02 21:09:22 得分 0

看看有没有非法的指针使用。你可以自己跟踪一下程序的流程看看问题出在什么地方Top

2 楼gzc(编程工具何其多,我却偏爱BCB)回复于 2001-09-02 21:16:18 得分 0

有没有重复Delete,我以前曾经不小心重复了一次Delete,结果老是出错。Top

3 楼whitelion(www.ccproj.com)回复于 2001-09-02 21:40:19 得分 0

把你的程序全部编译一遍再试试Top

4 楼ajun21century(海落鹰)回复于 2001-09-03 09:02:52 得分 0

跟踪流程找不出来,当然也可能是小弟初学手拙,昨晚找一高手断点跟踪也找不出来,非法的指针是什么样的,肯定没有重复delete。Top

5 楼Ton2000(小顽童XP)回复于 2001-09-03 09:11:48 得分 0

在关闭窗口时出问题,你再仔细看看关闭窗口时的代码吧!  
   
  要不你把源码贴出来让大伙看看。。。Top

6 楼ajun21century(海落鹰)回复于 2001-09-03 09:42:20 得分 0

问题不是出在关闭窗口时的代码,我把它屏蔽掉以后一样出毛病,我把代码贴出来吧,大家帮我看看。是一个五子棋程序。  
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "five_f.h"  
  #include   "mem.h"  
  #include   "string.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
  //画棋盘  
  void   TForm1::DrawGame()  
  {  
  int   step,width;  
  step=20;  
  width=280;  
  PaintBox1->Canvas->Pen->Color=clBlack;  
  PaintBox1->Canvas->Brush->Color=clBlack;  
  for(int   i=0;i<15;i++)  
        {  
        PaintBox1->Canvas->MoveTo(0,step*i);  
        PaintBox1->Canvas->LineTo(width,step*i);  
        PaintBox1->Canvas->MoveTo(step*i,0);  
        PaintBox1->Canvas->LineTo(step*i,width);  
        if(i==3||i==7||i==11)         //画要点  
              {  
              for(int   j=3;j<12;j+=4)  
                    {  
                    PaintBox1->Canvas->MoveTo(j*20,i*20);  
                    PaintBox1->Canvas->Ellipse(j*20-3,i*20-3,j*20+3,i*20+3);  
                    }  
              }  
        }  
  }  
  //----------------------------------------------------------------------------  
  void   __fastcall   TForm1::PaintBox1Paint(TObject   *Sender)  
  {  
  DrawGame();  
  if(Stepnum>=1)  
        for(int   i=0;i<15;i++)  
              for(int   j=0;j<15;j++)  
                    if(qizi)  
                          DrawQizi(qizi,i,j);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::PaintBox1MouseUp(TObject   *Sender,  
              TMouseButton   Button,   TShiftState   Shift,   int   X,   int   Y)  
  {  
  int   step,hang,lie;  
  step=Stepnum%2==0?1:2;  
  hang=Y%20<10?Y/20:Y/20+   1;  
  lie=X%20<10?X/20:X/20+1;  
  if(SetQizi(step,hang,lie))  
        {  
        DrawQizi(step,hang,lie);  
        Stepnum++;  
        }  
  else  
        Application->MessageBoxA("落子错误!","提示!",MB_OK);  
  if(Iswin(step,hang,lie))  
        {  
        Application->MessageBoxA("赢了!","提示!",MB_OK);  
        PaintBox1->Canvas->Brush->Color=clBtnFace;  
        PaintBox1->Canvas->FillRect(Form1->Canvas->ClipRect);  
        DrawGame();  
        for(int   i=0;i<15;i++)  
            for(int   j=0;j<15;j++)  
              qizi=0;  
        Stepnum=0;  
        }  
  }  
  //---------------------------------------------------------------------------  
  //判断是否5子连成一线  
  bool   TForm1::Iswin(int   player,int   hang,int   lie)  
  {  
  for(int   i=4;i>=0;i--)  
  //遍历行  
        {  
          if(qizi==player&&  
            qizi==player&&  
            qizi==player&&  
            qizi==player&&  
            qizi==player)  
            return(true);  
  //遍历列  
          if(qizi==player&&  
            qizi==player&&  
            qizi==player&&  
            qizi==player&&  
            qizi==player)  
            return(true);  
  //遍历两对角线  
          if(qizi==player&&  
        qizi==player&&  
        qizi==player&&  
        qizi==player&&  
        qizi==player)  
          return(true);  
  //*************  
          if(qizi==player&&  
        qizi==player&&  
        qizi==player&&  
        qizi==player&&  
        qizi==player)  
          return(true);  
          }  
  return(false);  
  }  
  //-------------------------------------------------------------------------  
  //将棋子信息赋值给数组  
  bool   TForm1::SetQizi(int   player,int   hang,int   lie)  
  {  
  if(!qizi)  
        {qizi=player;  
          return(true);  
        }  
  return(false);  
  }  
  //--------------------------------------------------------------------------  
  //画棋子  
  void   TForm1::DrawQizi(int   player,int   hang,int   lie)  
  {  
  if(player==1)  
        PaintBox1->Canvas->Brush->Color=clBlack;  
  else  
        PaintBox1->Canvas->Brush->Color=clWhite;  
        PaintBox1->Canvas->Ellipse(lie*20-10,hang*20-10,lie*20+10,hang*20+10);}  
  //-----------------------------------------------------  
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
  //初始化步数和棋子数组  
  Stepnum=0;  
  for(int   i=0;i<15;i++)  
        for(int   j=0;j<15;j++)  
              qizi=0;  
  Edit1->Text="";  
  Edit1->Enabled=false;  
  }  
  //---------------------------------------------------------------------------  
  //按理说问题出在下面的代码,但是我已经屏蔽掉了,也一样出错!!!  
  void   __fastcall   TForm1::FormClose(TObject   *Sender,   TCloseAction   &Action)  
  {  
  //memset(qizi,0,sizeof(short)*225);  
  //Application->Terminate();  
  }  
  //---------------------------------------------------------------------------  
  //监视鼠标位置  
  void   __fastcall   TForm1::PaintBox1MouseMove(TObject   *Sender,  
              TShiftState   Shift,   int   X,   int   Y)  
  {  
  Edit1->Text=IntToStr(X)+","+IntToStr(Y)+","+IntToStr(Stepnum);  
  }  
  //---------------------------------------------------------------------------  
   
  Top

7 楼dycdyc123(重出江湖)回复于 2001-09-03 09:44:48 得分 0

重新完全编译!!!!Top

8 楼ajun21century(海落鹰)回复于 2001-09-03 09:52:59 得分 0

编译的时候成功,然后关闭窗体的时候提示出现异常,错误的代码指示在“ /*   TCustomForm.Destroy   */   inline   __fastcall   virtual   ~TForm(void)   {   }   ”Top

9 楼ajun21century(海落鹰)回复于 2001-09-03 11:52:14 得分 0

请诸位大虾帮我看看吧!Top

10 楼gzc(编程工具何其多,我却偏爱BCB)回复于 2001-09-03 15:49:03 得分 0

你的棋子数组qizi是不是该定义为全局数组?再重新完全编译一次试试!Top

11 楼ajun21century(海落鹰)回复于 2001-09-03 16:47:49 得分 0

qizi数组就是定义的全局变量!Top

12 楼gzc(编程工具何其多,我却偏爱BCB)回复于 2001-09-03 16:54:49 得分 0

呵呵,这个我就不知道了,不好意思,帮你推推吧,希望高手解答!Top

13 楼ajun21century(海落鹰)回复于 2001-09-03 21:09:02 得分 0

问题还没有解决啊,谁来帮我?Top

责任编辑: efish 参与评论 查找更多:
相关文章
怎样使微软的IE不能用,一直用自己的浏览器,我用PC… 怎样使微软的IE不能用,一直用自己的浏览器,我用PC Security软件都不能锁住IE?
谁能解决win2000的花屏现象???? 谁能解决win2000的花屏现象????
Help! 数据库中记录的求和? Help! 数据库中记录的求和?
函数调用出错!帮帮忙! 函数调用出错!帮帮忙!
那位用過金山的WPS office 說說感想, 我看它有點像M… 那位用過金山的WPS office 說說感想, 我看它有點像MS office 的翻版
请问Dreamweaver4的KEY? 请问Dreamweaver4的KEY?
win2000的机器,用过一段时间后,发现有花屏现象?怎… win2000的机器,用过一段时间后,发现有花屏现象?怎样解决?
Dreamweaver4的KEY是?请教 Dreamweaver4的KEY是?请教
语音处理方法,高手来探讨 语音处理方法,高手来探讨
如何自己制作屏幕保护的密码功能(原理)? 如何自己制作屏幕保护的密码功能(原理)?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想