| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2037 人关注过本帖
标题:释放指针指向空间出错,求指教
只看楼主 加入收藏
hyeagle
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-11-15
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
释放指针指向空间出错,求指教
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    int order;
    int bianhao;
    struct node *link;
}Node,*L;
main()
{
    int B[]={3,1,7,2,4,8,4};
    L h, p, q;
    int i,m=4,n=7;
    p=h=(L)malloc(sizeof(L));
    h->order=1;
    h->bianhao=B[0];
    h->link=NULL;
    p=h;
    for(i=1;i<n;i++)
    {
        p=p->link=(L)malloc(sizeof(L));
        p->order=i+1;
        p->bianhao=B[i];
        p->link=NULL;
    }
    p->link=h;
    while(n--)
    {
        q=p;
        for(i=0;i<m;i++)
        {
            p=q;
            q=p->link;
        }
        p->link=q->link;
        m=q->bianhao;
        printf("%4d",q->order);
        //free(q);     /*这一行,注释掉没问题,不注释掉就会报错,这是为什么?*/
    }
}

这段代码是用来演示约瑟夫环的。
搜索更多相关主题的帖子: color 空间 
2016-11-17 16:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
//内存分配大小不是L,L是指针大小分配应该是Node的``,L只有4个字节,而Node占12个~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-17 18:21
hyeagle
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-11-15
收藏
得分:0 
回复 2楼 九转星河
不是很明白什么意思。。。可以具体点嘛。。
错误的地方是我注释的地方,其他没有错误
2016-11-17 20:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
是其他地方的错误影响了这个地方~p=h=(L)malloc(sizeof(L));结合上面所说的
//p得到的内存空间只是4个字节,而一个结构体12个字节。虽然溢出的内存会指向给后续空间的地址,但释放内存时只是释放指针L大小的4个字节。但一个结构体12个字节,被释放的那4个字节包含在结构体的12个字节中,这样释放会破坏原来结构体的结构,因而产生崩溃~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-17 20:11
hyeagle
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-11-15
收藏
得分:0 
回复 4楼 九转星河
多谢讲解,现在明白了,我把那一行改成(L)malloc(sizeof(node))之后就没有问题了
2016-11-17 20:29
快速回复:释放指针指向空间出错,求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031091 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved