关于C语言中Debug Assertion Failed解决方法
在编译和运行时都不会出现错误,但是在执行时会出现错误。
Debug Assertion Failed
可能的原因是
(1)直接释放了一个空指针,
(2)一个指针被释放了两次(即第二次释放一个空指针)
(3)数组越界:访问了超过数组长度的内存
例子:
for(m=0;m<n;m++)
{
if((stu=(struct student *)calloc(1,sizeof(structstudent)))==NULL)
{
printf("要空间失败n");
return;
}
while(m<n)
{
if((strcmp(stu->num,"#")==0))(省去了一些内容,此处无错误)
{
printf("输入信息结束n");
break;
}
free(stu);
m++;
}
}
当n=1时执行时只要一次空间,执行while时也执行一次,即释放一次
当n=2时在第一次执行时,要一次空间,在执行while时要执行两次,即要释放两次指针所指向的内存,
但是指针第一次分配到了内存空间,可以正常释放指针stu指向的内存但是第二次stu就没有分配到内存空间,但仍要执行free,这就意味着释放了一个空指针
修改后的程序:
while(m<n)
{
if((stud=(struct student *)calloc(1,sizeof(structstudent)))==NULL)
{
printf("要空间失败n");
return;
}
if((strcmp(stud->num,"#")==0))
{
printf("输入信息结束n");
break;
}
free(stud);
m++;
}
造成上述错误的原因,在做程序时思路不明确,不熟悉防御式编程和编程的风格