使用delete []出现的堆栈调试错误

废话不说,贴代码段:VS2010+C++


EnterCriticalSection(&m_crit);
m_InitImport = TRUE;
if(m_fileList.Open(exePath+"\\playMenu.txt",CFile::modeRead))
{
pfile = new char[m_fileList.GetLength()+10];


memset(pfile,0,m_fileList.GetLength());

int a  = m_fileList.Read(pfile,m_fileList.GetLength());
pfile[a] = '\0';
strFind.Format("%s",pfile);

while(true)
{
pos2 = strFind.Find(",",pos1+1);
if (pos2 <= 0)
{

if (BW_AddAudioFileName(strFind.Mid(pos1,strFind.GetLength()-pos1)) == 0)
{
importnum ++;
}

break;
}
name = strFind.Mid(pos1,pos2-pos1);
if (BW_AddAudioFileName(name) == 0)
{
importnum ++;
}

pos1 = pos2+1;
}
delete []pfile;
m_fileList.Close();
}
m_InitImport = FALSE;
LeaveCriticalSection(&m_crit);



这段代码,从playMenu.txt中读取逗号分隔的音频文件名称,之前一直在delte []pfile处,出现错误,报堆栈异常,后来网上查找资料,发现new的内存和实际delete的内存大小不符合,仔细检查,想明白了,是new的小了,所以改成pfile = new char[m_fileList.GetLength()+10];然后一切OK ,仅以警示和启发,new和delete使用要尽量小心点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShaYQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值