返回信息流char* SameChar(const char* ptrInput)
{
int iRepeate = 0;
int iMax = 1;
int i=0 ,k=0;
if(NULL==ptrInput)
return NULL;
char chRepeate='\0';
char* ptrRepeate;
while(*(ptrInput+i)!='\0')
{
k = i ;
iRepeate = 0;
while(*(ptrInput+i)==*(ptrInput+k))
{
iRepeate++;
k++;
}
if(iMax<iRepeate)
{
iMax = iRepeate;
chRepeate = *(ptrInput+i);
}
i++;
}
ptrRepeate = new char[iMax];
for(i=0;i<iMax;i++)
{
*(ptrRepeate+i)=chRepeate;
}
*(ptrRepeate+iMax)='\0';
return ptrRepeate;
}
char* TestFunc(char* ptr)
{
char* ptrTemp = new char[10];
strcpy(ptrTemp,ptr);
return ptrTemp;
}
int main(int argc, char* argv[])
{
char* p;
p=TestFunc("Hello");
cout<<p<<endl;
delete[] p; //这个地方OK
int data[5]={5,4,3,2,1};
char* ptrSameChar = NULL;
ptrSameChar = SameChar("aabbbccccc");
cout<<ptrSameChar<<endl;
delete[] ptrSameChar; //为什么这个地方异常呢?
return 0;
}
VC6下:
2个定义的函数里面都new一块内存,然后在main中调用这2个函数,再释放对应的内存。为什么一个正常,一个异常呢?
还有哪位帮忙看下上面2个函数的设计,有哪些不妥之处。
这是一条镜像帖。来源:北邮人论坛 / cpp / #24114同步于 2009/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
老问题,new和delete[求助]
youziboy
2009/5/22镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
LS说的有道理,
ptrRepeate = new char[iMax]; //只申请了 0 - iMax
for(i=0;i<iMax;i++)
{
*(ptrRepeate+i)=chRepeate;
}
*(ptrRepeate+iMax)='\0'; //此处可能越界了
return ptrRepeate;
你是在debug版本编译才会出现这个问题,具体的问题ptrRepeate = new char[iMax]; 少申请了一个字节,改为ptrRepeate = new char[iMax+1]; debug编译中加入了防止堆越界的检查,这样可以防止堆溢出的恶意攻击。如果你用release编译的话,这种错误就不会出现异常了,但是这样做很可能覆盖掉堆中的重要数据,从而造成运行时出错。