qq_35541626 2020-10-13 17:40 采纳率: 0%
浏览 63

关于c语言链表的指针问题

这个是我尝试用c语言写的链表,现在写到了删除链表中的一个节点的步骤。然后我在这步出现了一个很费解的问题。在void free-node这个方法中,我希望用辅助指针p-freeAid 来辅助我删掉链表中的节点。

下面是我遇到的问题:
① 我已经用P-freeAid指向了 p-free的下一个节点。我在debug里也看到,p-free的下一个节点的地址==p-freeaid的值。
但是我尝试用 p—freeaid去调p—free的下一个节点的num的值却显示系统错误,相当费解。
②当我用free释放了p—free所指的内存空间后,我用p-free 读里面的值仍是有结果的,但是 debug里面显示的 p free的值是“-179469979(类似与这样的数)”我感觉这个就证明空间已经释放了,但是还是能读到值,这点也超级费解。

代码贴到下面了,请大神解答一下,感激不禁~

typedef struct student_link
{
    char name[20];
    int num;
    int score;
    struct student_link *next;
}STU;

void creat_head(STU **p_head,STU *p_new){
    STU *p_mov;
    p_mov=*p_head;
    if(*p_head==NULL){
    *p_head=p_new;
     p_new->next=NULL;
    }
    else {
        while ((p_mov->next)!=NULL) {
            p_mov=p_mov->next;
        }
        p_mov->next=p_new;
        p_new->next=NULL;
    }
}
void showThe_link(STU*p_head){
    STU *p_mov;
    p_mov=p_head;
    if(p_head==NULL){
        printf("当前链表为空\n");
        return;
    }else{
        while (p_mov!=NULL) {
            printf("%d %d %s\n",p_mov->num,p_mov->score,p_mov->name);
            p_mov=p_mov->next;
        }
    }

}

STU* creat_node(int num,int score,char stu_name[]){
    STU*p_new;
    p_new=(STU*)malloc(sizeof(STU));
    strcpy(p_new->name,stu_name);
    p_new->num=num;
    p_new->score=score;
    return p_new;
}
void add_node(STU **p_head,int num,int score,char stu_name[]){
    creat_head(p_head,creat_node(num,score,stu_name));
}
void free_node(STU **p_head){
    STU*p_free;
    STU*p_freeAid;
    printf("p_freeAid的值是:0X%x\n",p_freeAid->num);
    p_free=*p_head;
    if(*p_head==NULL){
        printf("这个链表为空,无需释放\n");
    }
    else{
        while (p_free!=NULL) {
            p_freeAid=p_free->next;
            printf("p_freeAid的值是:0X%x\n",p_free->next->num);
            printf("p_freeAid的值是:0X%x\n",p_freeAid);
            printf("p_free的值是:0X%x\n",p_free->next);
            int num=p_free->num;
            printf("%d\n",num);
            free(p_free);
            printf("%d\n",p_free->num);
            p_free=p_freeAid;
        }
    }
    //*p_head=NULL;
}
int main()
{
    STU* link_head=NULL;
   /* int num,i;
    printf("请输入链表初始的个数:\n");
    scanf("%d",&num);
    for(i=0;i<num;i++){
        p_new=(STU*)malloc(sizeof(STU));
        printf("请输入学号、分数、名字:\n");
        scanf("%d %d %s",&p_new->num,&p_new->score,&p_new->name);
        } */
    char str[12]="cherry";
    add_node(&link_head,6,7,str);
    add_node(&link_head,9,7,str);
    showThe_link(link_head);
    //free_node(&link_head);
    showThe_link(link_head);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-10-13 19:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 扫描枪扫条形码出现问题
  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?