1. 错误描述:   刚才写了一个删除单链表的结点函数, 参数是 指向链表的指针和链表中指定删除的结点的指针。  当我free这个待删除的结点, 结果报错。

2. 为什么会报错?

我查了查MSDN, 看到“Attepmting  to free an invalid pointer (a pointer to a memory block that was not allocated by calloc, malloc, or realloc) may affect subsequent allocation requests and cause errors”。 意思是  只能free掉由calloc,malloc, realloc申请的内存。 而我试图释放定义的结点所占内存。

3. 错误代码

status
Delete( struct NODE **rootp, struct NODE *node )
{
PNode p_node = NULL; if ( rootp == NULL ){
printf( "没有可操作的链表\n" );
return FALSE;
} if ( node == NULL ){
printf( "没有指定删除的结点\n" );
return FALSE;
} if ( node == *rootp ){
*rootp = node->next; /* 删除第一个结点 */ }else{
for ( p_node = *rootp;
p_node != NULL && p_node->next != node;
p_node = p_node->next ); if ( p_node == NULL ){
printf( "指定删除的结点不存在\n" );
return FALSE; }else{
p_node->next = node->next; /* 删除中间结点或尾结点 */
} } /* 问题在这里 */
free( node );
node = NULL;
return TRUE;
} /* main函数 */
void
main ()
{
PNode list = (PNode) malloc ( sizeof( struct NODE ) );
PNode p = NULL;
Node one, two, three, four; one.data = ;
two.data = ;
three.data = ;
four.data = ;
one.next = &two;
two.next = &three;
three.next = &four;
four.next = NULL; list->next = &one;
p = &three; if ( Delete( &list, p ) == TRUE ){
Put( list );
}else{
printf( "删除失败\n" );
}
}

free一个无效指针的更多相关文章

  1. 关于VS打开cshtml出现 未能完成该操作。无效指针

    关于VS打开cshtml出现 未能完成该操作.无效指针 第一步:关闭VS 第二部:删除%LocalAppData%\Microsoft\VisualStudio\14.0\ComponentModel ...

  2. 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题

    题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点:如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL:给出程序实现,并分析时间复杂度和空间复杂度. ...

  3. “ddl”有一个无效 SelectedValue,因为它不在项目列表中。

    “ddl_ekt”有一个无效 SelectedValue,因为它不在项目列表中. 怎么回事 现象: 在用户控件的page_load事件里绑定下拉框,报上面错误 解决: 将下拉框绑定,放在page_In ...

  4. 关于Visual Studio调试 无效指针提示

    前几天遇到了这个问题,编译没问题,直接运行没问题 但是一调试,会提示无效指针,(按Ctrl+F5可以运行,但按F5提示无效指针) 只要这样,新建C:\ProgramData\Microsoft Vis ...

  5. 【转】 C++易混知识点4: 自己编写一个智能指针(Reference Counting)学习auto_ptr和reference counting

    这篇文章建大的介绍了如何编写一个智能指针. 介绍: 什么是智能指针?答案想必大家都知道,智能指针的目的就是更好的管理好内存和动态分配的资源,智能指针是一个智能的指针,顾名思义,他可以帮助我们管理内存. ...

  6. 启动apache (OS 10022)提供了一个无效的參数。解决方式

    今天 apache 突然启动不起来了,查看了一下错误日志发现了例如以下错误: [Tue Mar 17 11:27:32 2015] [crit] Parent: child process exite ...

  7. win7 LR11.0 启动controller报:Failed to create Online:无效指针

    win7 LR11.0 启动controller报:Failed to create Online:无效指针 运行lr setup.exe 进行修复后问题解决 修复完成后,覆盖lr安装目录“bin”文 ...

  8. 有一个无效 SelectedValue,因为它不在项目列表中

    “Drp_XX”有一个无效 SelectedValue,因为它不在项目列表中 出现以上异常的原因肯定是将DrowDownList控件的SelectedValue属性赋值为一个列表中不存在的值.那么我们 ...

  9. 这是一个无效的原路径/url

    当我们在SourceTree上新建一个“从URL克隆”的远程项目时,在确认“URL”无误的前提下依然报红色字体“这是一个无效的原路径/URL”错误,我们只需要快捷键“Command + ,”打开Sou ...

随机推荐

  1. lr中switch的应用

    Action() { char *time; int i,j,length; time=lr_eval_string("{testtime}"); lr_error_message ...

  2. Android回调接口的写法

    方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interfac ...

  3. Uva674 完全背包求方案数

    记忆化搜索.注意输入n的位置,否则Tle. dp[i][j]表示用前j种硬币组成i分钱时的种类数 那么状态转移方程是:dp[i][j]+=DP(i-k*v[j],j-1) #include<io ...

  4. Linux profile File

    umask 022alias vim="/pd/vim/7.1/bin/vim"if [ -e /usr/bin/vim ]; then alias vim="/usr/ ...

  5. JS验证金额

    <script type="text/javascript">        function ismoney(obj) {            check(obj) ...

  6. How to retrieve instance parameters from an uninstantiated (uninserted) family

    The trick to be able to read the default values for instance parameters is to get to the FamilyManag ...

  7. 使用expdp时遇到ORA-39002、ORA-39070错误

    使用expdp时,遇到”ORA-39002.ORA-39070......”连续报错. 1.  遇到的问题 expdp yguo/dbimp@botnet schemas=yguo dumpfile= ...

  8. So you want to be a 2n-aire?[HDU1145]

    So you want to be a 2n-aire?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...

  9. BZOJ1315 : Ural1557Network Attack

    找到一棵dfs搜索树,给每条非树边一个随机非0权值,每条树边为所有经过它的树边的权值的异或. 那么有2种情况是合法的: 1.一条边权值为0,一条边权值非0. 2.两条边异或和为0. 排序后统计即可,时 ...

  10. Hadoop2.2.0 hive0.12 hbase0.94 配置问题记录

    环境:centos6.2 Hadoop2.2.0 hive0.12 hbase0.94 1>hadoop配好之后,跑任务老失败,yarn失败,报out of memory错误,然后怎么调整内存大 ...