typedef struct CBinfo
{
char name[14];
long ID;
int DB_DH;
}CBINFORMATION;
class CCBLINKApp : public CWinApp
{
......
CBINFORMATION* m_cbIn;
......
}
......
CCBLINKApp::CCBLINKApp()
{
......
m_cbIn=NULL;
......
}BOOL CCBLINKApp::GetParaFunc(CString PathName)
{
if (m_cbIn!=NULL)
{
delete[] m_cbIn;
m_cbIn=NULL;
}
.........
m_cbIn=new CBINFORMATION [nCount];
..........
}
为什么程序一运行到 GetParaFunc(CString PathName)中delete[] m_cbIn时出错?
提示 "Debug Error!
DAMAGE: after Normal block(#117) at 0x00378f98."
我的原意是:因为程序中多次运行GetParaFunc(CString PathName),需每次动态调整m_cbIn数组大小,重新分配内存地址,防止每次运行到GetParaFunc(CString PathName)时,多次分配m_cbIn数组内存,造成内存资源消耗太多.
请各位大侠指点!
m_cbIn = 0即可
delete[] m_cbIn是删除一个指针数组
delete m_cbin;
如果想删除分配的空间,最好使用malloc与free函数进行。
m_cbIn=new CBINFORMATION [nCount];吗?删除的时候还能delete m_cbIn这样啊?就你所写的,我看没有错误!你应该看看别的地方是不是改了什么东西。
关注.
一:你申明为CBINFORMATION* m_cbIn;
用delete[] m_cbIn;当然回出错了.应当使用delete m_cbIn;
二:指针虽然被你delete掉了,但是,它的值还不是NULL,应加上一句:
m_cbIn=NULL;
然后一切OK了。
void mydelete(CBINFORMATION* p){
delete []p;
p=0;
}
就能防止此类事情的发生。
就你所写的,我看没有错误!前面几位说什么“用delete m_cbIn”之类的人C++肯定没入门啦,
你在别的地方用了delete[]m_cbIn而忘了m_cbIn=NULL是一种可能;
也可能你开始new 了10个;后来new了1 个,m_cbIn可能在程序的另一个地方不小心地指向了new 一个的地址;
有一点可能肯定,你的错误不在你贴出来的代码中
m_cbIn=new CBINFORMATION [nCount];
改成
m_cbIn=new CBINFORMATION [nCount+10];
试试,如果问题解决了,那么一定是你数组访问越界了,然后进一步确定哪里出了什么问题.
typedef struct CBinfo
{
char name[14];
long ID;
int DB_DH;
}CBINFORMATION;
在这个结构里面也有一个数组,是不是这个数组使用的时候访问越界等等.
还有,贴出一些其他代码吧,我想仅仅就你现在贴出的代码来看是没有问题的.
嘿嘿,不用我说你也知道问题在哪儿了吧.
我在后来查明了原因:并不是因为new delete 操作符使用的语法不对.
而是数组越界的问题.我在程序中new 了nCount 个 CBinfo结构类型变量,赋值的时候却使用了 nCount+1个,数组访问越界了.delete时当然出错了!
凡是说数组越界的朋友答对了.特别是 liu_feng_fly(谁动了我的~~~~~~~~~~~~~~工资),和我后来查出问题的办法几乎是一致的.
不管正确与否,都得感谢各位,真理越辩越明!