2 zw88865996 zw88865996 于 2013.09.07 16:48 提问

C++程序在vs2010下运行出现错误:HEAP CORRUPTION DETECTED ........

我的c++程序之前在vc++6.0环境下运行正常,现在在VS2010下调试出现错误:HEAP CORRUPTION DETECTED......,经查询,可能是在Myfile.cpp中使用了new.delete申请了内存空间,导致内存操作越界,在该程序段加了 ASSERT(_CrtCheckMemory())后没有出现那个错误提示,但运行后对话框窗口不见了,实际上不能成功,由于我是新手,初次到CSDN中来求助,还望前辈高手不吝赐教,小弟万分感谢。其中的部分代码如下:
int ChangeNameExtension( CString s1)
{
int i,j;
char *ExtendedName;

USES_CONVERSION;
int n = s1.GetLength();
char *temp = new char(n*2+1);
strcpy(temp,(LPCTSTR)s1);

if ((ExtendedName=strchr(temp,'.'))==NULL)
{
//AfxMessageBox("文件扩展名有误!");
return -1;
}

ExtendedName++;
return 0;
}

int ChangeFileName( CString s1)//return:-1, 0, 1
{
int i,j;
char *ExtendedName;

USES_CONVERSION;
int n = s1.GetLength();
char *temp = new char(n*2+1);
strcpy(temp,(LPCTSTR)s1);
// ASSERT(_CrtCheckMemory());

if ((ExtendedName=strchr(temp,'.'))==NULL)
{
//AfxMessageBox("文件扩展名有误!");
delete[] temp;
return -1;
}

ExtendedName--;
//判断文件名是否符合递增要求,即是否有数字。
if (*ExtendedName<'0' || *ExtendedName>'9')
{
delete[] temp;
return -1;
}

for(i=0;i<=ExtendedName-s1;i++)
if(*(ExtendedName-i)<'9')
{
(*(ExtendedName-i))++;

  j = i - 1;
  while(j>=0)
  {
    (*(ExtendedName-j)) = '0';
    j--;
  }
  delete[] temp;
  return 1;
}
delete[] temp;
return 0;

}

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.01.03 22:01

设置断点,单步跟踪调试一下,看你具体出错的代码语句。分析

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!