关于C语言中Debug Assertion Failed解决方法

关于C语言中Debug Assertion Failed解决方法

在编译和运行时都不会出现错误,但是在执行时会出现错误。

Debug Assertion Failed

可能的原因是

(1)直接释放了一个空指针,

(2)一个指针被释放了两次(即第二次释放一个空指针)

(3)数组越界:访问了超过数组长度的内存

例子:

for(m=0;m<n;m++) 

 {

             if((stu=(struct student *)calloc(1,sizeof(struct student)))==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(struct student)))==NULL)

              {

                     printf("要空间失败/n");

                  return;

              }

              if((strcmp(stud->num,"#")==0))

              {

                     printf("输入信息结束/n");

                     break;

              }

             free(stud);

              m++;

       }

造成上述错误的原因,在做程序时思路不明确,不熟悉防御式编程和编程的风格。

 

出自http://blog.sina.com.cn/s/blog_598f483f01009ppt.html~type=v5_one&label=rela_nextarticle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值