当时在测试程序的时候,发现随着程序的运行,程序占用的内存一直再增加,直到最后崩溃为止。
后来经过研究发现,原理是用new申请了char*数组,由于没有释放导致内存一直在增加。
本以为bug就这样应该能够解决了,但是却发现了内存不但没有消减,反而在调试的时候还弹出了错误对话框。
弹出对话框:Windows 已在 ***.exe 中触发一个断点。其原因可能是堆被损坏,这也说明 ***exe 中或它所加载的任何 DLL 中有 bug。
经过几天的痛苦钻研之后,才知道,原来是char*的变量被自己赋值给其他的地址去了,所有delete[]的时候,会弹出错误。
void sort(char ** str)
{ //冒泡 strcmp原型:extern int strcmp(char *s1,char * s2);
char * temp = new char[5];
for(int i=0;i<5;i++)
{
for(int j=i+1;j<5;j++)
{
if(strcmp(str[i],str[j])>0)
{
strcpy(temp , str[i]);
//temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
delete[]temp;
}
temp = str[i];后, delete[]temp;就有问题
解决方法:而strcpy(temp , str[i]);delete就没问题