关于C语言中DebugAssertionFailed解决方法 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(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,这就意味着释放了一个空指针

修改后的程序:

关于C语言中DebugAssertionFailed解决方法 assertion failed解决

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++;

}

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

  

爱华网本文地址 » http://www.413yy.cn/a/25101017/361422.html

更多阅读

VB中,EOF是什么意思? c语言中eof是什么意思

VB中,EOF是什么意思?EOF就是文件末尾的意思,end of file。EOF()函数的参数是一个已经打开的文件的句柄(也就是标识符)。在打开文件进行操作的过程中,文件指针有可能被移动,当指针被移动到文件末尾时EOF()函数返回True。*********返回

关于C语言中的restrict关键字 c语言关键字

一、新的C语言:一切都源于FORTRAN(restrict的历史)http://www.chinaunix.net/ 作者:phoneix 发表于:2007-06-17 09:18:45此篇文章摘取于即将登载于《Dr.Dobb's 软件研发》第三期(2003年10月)的《The New C:一切源于FORTRAN》,文章主要是介

模拟c++中的strstr函数 c语言中strstr函数

/************************************************************************//* 例子:请写出一个函数来模拟c++中的strstr函数:该函数的返回值是主传中字符子串的位置以后的所有字符,请不要使用任何c程序已有的函数函数名: strstr函

C语言中scanf函数输入回车符的问题 c语言scanf连续输入

在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时候就必须有哪些东西,比如:scanf("%c%c%c"),那么输入

C语言中的static函数 c语言中的变量

内部函数和外部函数函数一旦定义后就可被其它函数调用。 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类:一、内部函数如果在一个源文件中定义的函数只能被本

声明:《关于C语言中DebugAssertionFailed解决方法 assertion failed解决》为网友小伊泽的探险梦分享!如侵犯到您的合法权益请联系我们删除