Delete释放指针数组指向的内存空间出错

来源:百度知道 编辑:UC知道 时间:2024/05/30 11:21:42
#include<stdio.h>
#include<string.h>
#define N 6
void main()
{char *p[N],*t;
int i,j,exchange;
for(i=0;i<6;i++)
p[i]=new char[10]; //给每个指针元素申请10个元素的字符数组
p[0]="FORTRAN";
p[1]="PASCAL";
p[2]="BASIC";
p[3]="C";
p[4]="COBOL";
p[5]="Smalltalk";
for(i=0;i<N;i++) //冒泡法将6个字符串按字母表排列
{exchange=0;
for(j=0;j<N-i;j++)
if(strcmp(p[j],p[j+1])>0)
{t=p[j];p[j]=p[j+1];p[j+1]=t;exchange=1;}
if(!exchange) break;
}
for(i=0;i<N;i++)
{puts(p[i]);printf("\n");}
delete[] p[0]; // 释放指针元素p[0]所指的空间,本步报错:Debug Assertion Failed
getchar();
}
我已找到问题原因,北风微风的解决方案不行哦~

#include<stdio.h>
#include<string.h>
#define N 6
void main()
{char *p[N],*t;
int i,j,exchange;
for(i=0;i<6;i++)
p[i]=new char[10];
strcpy(p[0], "FORTRAN"); //字符串赋值要用strcpy,否者只是赋的地址,指向常量区的字符串,并且造成内存泄露
strcpy(p[1], "PASCAL");
strcpy(p[2], "BASIC");
strcpy(p[3], "C");
strcpy(p[4], "COBOL");
strcpy(p[5], "Smalltalk");
for(i=0;i<N;i++)
{exchange=0;
for(j=0;j<N-i;j++)
if(strcmp(p[j],p[j+1])>0)
{t=p[j];p[j]=p[j+1];p[j+1]=t;exchange=1;}
if(!exchange) break;
}
for(i=0;i<N;i++)
{puts(p[i]);printf("\n");delete[] p[i]; //循环删除分配内存
}
getchar();
}

delete[] p[0]; //delete后面的[]去掉

问下LZ,是去掉屁屁后的【{([0])}】 吗?