c 链表输出不完整

新手上路,请多包涵

为什么这个C 链表只输出量第一个节点呢?

问题描述

输入一个素组,输出一个链表的每个节点值。

问题出现的环境背景及自己尝试过哪些方法

是不是返回值的问题?

相关代码

#include <stdio.h> // 预编译命令
#include <stdlib.h>
//#include <malloc.h>
#define NULL 0       // 定义空指针常量
struct TM            // 定义TM结构
{
    int x, y;        // 整型变量x,y
    struct TM *next; // 指向TM结构的指针
};
int i;
struct TM *list_create(void)
{
    struct TM n[8], *head, *p;       // 声明TM型结构数组n[8],TM结构指针head,p
    for(i = 1; i <= 7; i++)          // 循环体开始
    {
        printf("Input The Value of [%d]x [%d]y \n", i,i); // 提示输入第i个结构的x值
         scanf("%d %d", &(n[i].x),&(n[i].y));             // 输入a scanf("%d", &(n[i].x));
    }
    head = &n[1];                    // 链表头部指向n[1]
    for(i = 1; i <= 7; i++)          // 将结构数组n形成链表
    {
        n[i].next = &n[i + 1];       // n[i]的next指针指向下一个结构n[i+1]
    }
    n[7].next = NULL;                // 链表尾部指向空
/*  for(int m=0;m<sizeof(n)/sizeof(n[0]);++m)
    {
        printf("%d\n",n[m]);
    } */
    //p = head;
    //printf("p=%d\n",typeof(p));
    return head;

}

void list_print(struct TM *head)
{   struct TM *p;
    p = head;            // p指向链表头部head
    i = 0;               // i赋值为1
    do                   // 直到型循环,用于输出链表内容
    {
        printf("Node Value%d: x=%d, y=%d\n", i, p->x, p->y);   // 循环体开始, 输出结点内容((*p).x,(*p).y)
        p = p->next;     // p指向相邻的下一个结点
        i = i + 1;       // 计数i加1
    }
    while (p != NULL);   // 未到链表尾部,则继续循环
};

void main()
{
    struct TM *head;
    head = list_create();
    list_print(head);
}

你期待的结果是什么?实际看到的错误信息又是什么?

image.png

阅读 1.7k
2 个回答
struct TM *list_create(void)
{
    struct TM n[8], *head, *p;       // 声明TM型结构数组n[8],TM结构指针head,p
    // ...............
    head = &n[1];                    // 链表头部指向n[1]
    // ...............
    return head;

}

n 是一个局部变量,函数返回之后它就消失了。
所以 head 在函数返回之后变成了一个非法地址(因为它指向的对象不在了)。

后面的一片都是未定义行为。什么结果都有可能。

struct TM n[8], *head, *p;中的n[8]属于struct TM *list_create(void) 函数仅在此函数内有效即进如此函数n[8] 有效出去后空间释放 ,head所指的空间不确定;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进