关于Debug Assertion Failed问题
书上代码:
#include<stdio.h>
#include<stdlib.h> /* 提供malloc()、free()函数 */
#include<string.h> #define TSIZE 45 struct film {
char title [TSIZE];
int rating;
struct film *next; /* 指向链表的下一个结构 */
}; int main()
{
struct film *head=NULL; /* 链表头 */
struct film *prev,*current; /* 定义两个film结构型指针 */
char input[TSIZE]; /* 字符数组 */ puts("Enter first movie title:");
while(gets(input)!=NULL && input[0]!='\0') /* 接收键盘上输入的字符串 */
{
current=(struct film *)malloc(sizeof(struct film)); /* 为结构型分配足够的存储空间 */
if(head==NULL) /* 第一个节点为空 */
head=current; /* 则将地址赋值给头 */
else /* 后续节点 */
prev->next=current; /* 将地址赋给结构指针指向前一个结构中的next成员 */
current->next=NULL; /* 用空指针给current指向的第二个结构成员next赋空值 */
strcpy(current->title,input);/* 将电影名赋值给结构型中的标题 */
puts("Enter your rating <0-10>:");
scanf("%d",¤t->rating);
while(getchar()!='\n')/* 接收回车符 */
continue;
puts("Enter next movie title (empty line to stop):");
prev=current;/* 接受下轮输入 */
} if(head==NULL)
printf("No data entered.");
else
printf("Here is the movie list:\n");
current=head;/* 指向头节点 */
while(current!=NULL)
{
printf("Movie: %s Rating: %d\n",current->title,current->rating);
current=current->next;/* 不断指向下一个 */
} current=head;/* 问题出在这里 */
while(current!=NULL)/* 内存使用完后释放内存 */
{
free(current);
current=current->next;
} printf("Bye!\n");
return 0;
}
迷惑:
去掉 current=head; 后程序才能正常运作。
网上查了一下,也有人提过这个问题,但他的解决方法是将free直接去掉,运行就没问题了。
然后我就奇怪了,难道不用释放内存吗?
解决:
//再来说说这个问题,释放的代码确实是错误的,正确的释放操作为: /* 再定义一个结构体类型的指针 temp */
while(current)
{
temp = current;
current = current -> next;
free(temp);
}
关于Debug Assertion Failed问题的更多相关文章
- Qt 调试时的错误——Debug Assertion Failed!
在VS2008中写qt程序时调试出现此问题,但在release模式下就不存在,在网上搜罗了一圈,是指针的问题. 问题是这样的: 需要打开两个文件,文件中数据类型是float,我使用QVector进行保 ...
- Solve Error Debug Assertion Failed Expression vector iterators incompatible Using PCL in Release Mode of VS2010
When using PCL 1.4.0 in the release mode building under VS2010, we might sometime get the error &quo ...
- Debug Assertion Failed!
问题并没有解决..... 不知道怎么回事,先都没有这样的情况... VC++调程序出现如下错误: Debug Assertion Failed! Program: D:wyuS ...
- (转)Debug Assertion Failed! Expression: _pFirstBlock == pHead
最近在VS上开发C++程序时遇到了这个错误: Debug Assertion Failed! Expression:_pFirstBlock == pHead 如图: 点击Abort之后,查看调用 ...
- C++ error:Debug Assertion Failed.Expression:_BLOCK_TYPE_IS_VALID(phead->nBlock)
Debug Assertion Failed.Expression:_BLOCK_TYPE_IS_VALID(phead->nBlockUse) 关于上面这个错误,我在上一篇文章中的程序遇到过了 ...
- C++析构函数造成Debug Assertion Failed的问题
昨天写了两个程序,均出现了析构函数造成Debug Assertion Failed的问题,由于是初学c++怎么想也想不通问题出在哪里.今天早上经人指点终于明白问题所在了.下面贴出代码和问题解析:(以下 ...
- Debug Assertion Failed! Expression: _pFirstBlock == pHead
点击Abort之后,查看调用栈,发现异常在函数return时被时产生,进一步看是vector的析构函数被调用时产生,以前没开发过C++项目,没什么经验,这个错误让我很困惑,第一,我电脑上并没有f盘:第 ...
- opencv检错:程序运行过程正常,当跳出函数时出现断言错误(Debug Assertion Failed)
转载http://blog.csdn.net/u012327581/article/details/51351780 1.问题描述 在VS2015下配置好Opencv后,程序在函数运行过程中正常,调试 ...
- MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误
今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目 ...
- 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框
1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...
随机推荐
- for await of异步操作集合遍历
function Gen (time) { return new Promise((resolve,reject) => { setTimeout(function () { resolve(t ...
- VMware 搭建linux虚拟机环境
1.任务管理器-服务 确认VMware服务是否启动 2.VMware生成网关地址 编辑--虚拟网络编辑器 VMnet8 NAT设置子网IP,子网掩码,网关 3.windows网络--更改适配器设置-- ...
- 概率dp 期望 逆推
题目大意: 从起点0点开始到达点n,通过每次掷色子前进,可扔出1,2,3,4,5,6这6种情况,扔到几前进几,当然对应飞行通道可以通过x直达一点y,x<y,计算到达n点或超过n 点要扔色子的次数 ...
- 微信小程序遮罩层覆盖input失效
问题:微信小程序中,我们常使用遮罩层,如点击按钮弹出下拉框.弹框等等.若在遮罩层下存在input.textarea.canvas.camera.map.video等标签时,会出现遮罩层覆盖失效的问题. ...
- Docker - Docker Engine 结构结构概述
概述 Docker Engine 结构的简单描述 ref docker 实战 第一本 docker 书 1. docker 版本 1. 版本 Docker Engine - Community 概述 ...
- jmeter plugin manager安装插件
https://jmeter-plugins.org/wiki/PluginsManager/ 以websocket 插件为例 先安装plugin manger 第二步:打开jmetre optio ...
- Dart语言学习(二) Dart的常量和变量
1.使用var声明变量,可赋予不同类型的值 Dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推导 Dart中定义变量可以通过var关键字可以通过类型来申明变量 var str='t ...
- acm数论之旅--唯一分解定理
题目: 给出n,问n = b^p中p符合该等式的最大值 分析: 先求出所有n的质因子,然后对这m个质因子分类统计,比如 n = 36时,可以分成 2个2,2个3,然后求出所有这些基数的 最大公因数gc ...
- document删除元素(节点)
不需要获取父id:document.getElementById("id").parentNode.removeChild(document.getElementById(&quo ...
- Linux动态库路径配置
参考链接:https://blog.csdn.net/blade2001/article/details/32839937 为什么要关注动态库路径配置,是因为工作中遇到动态库依赖其他动态库,而其他动态 ...