为何编译器提示堆已损坏?

static int count = 1 ;
static int m = 0;
printf("请输入字符串\n");
char **array1;
array1 = new char *[80];
while (true)
{

out:

for (static int i = 0; i <= count; ++i)
{
array1[i] = new char[count];
memset(array1[i], 0, count * sizeof(char));
}
cin.getline(array1[m], 80);
m++;
count ++ ;
ai:
char *str=new char[80];
memset(str, 0, 80);
printf("回车继续输入,按c结束输入\n");
cin.getline(str, 80);
if (*str == 'c')
{
if(str!=NULL)
delete[]str;
break;
}
else if (*str == 0)
{

if(str!=NULL)
delete[]str;
goto out;
}
else
{

if(str!=NULL)
delete[] str;
printf("请按要求输入\n");
goto ai;
}

}
for (int i = 0; i<count; i++)
{
if(array1[i]!=NULL)
delete[] array1[i];
}
delete[] array1;

return;

仔细检查下,你有将相同的变量释放了2次



char **pStr = new char *[10];

for (int i = 0;i < 10;i ++)
{
    pStr[i] = new char[10];
}

for (int i = 0;i < 10;i ++)
{
    delete pStr[i];
}

delete pStr;