氯的平方 2020-09-02 22:30 采纳率: 100%
浏览 87
已采纳

关于链表中指针的问题

#include<iostream>

using namespace std;

typedef struct Node{
    char data;
    Node* next;
}Node,*LinkList; //链表结构单元的声明

void InitList(LinkList* L) //参数是链表结构单元的二级指针 初始化函数没有返回值
{
     *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;
}

void create_From_Head(LinkList L) //头插法建立链表
{
    Node* s;
    char c;
    int flag = 1;

    while (flag)
    {
        cin >> c;
        if (c != '#')
        {
            s = (LinkList)malloc(sizeof(Node));
            s->data = c;

            s->next = L->next;
            L->next = s;
        }
        else flag = 0;
    }

}


void create_From_Tail(LinkList L)
{
    LinkList s, r = L; 
    int flag = 1;
    char c;

    while (flag)
    {
        cin >> c;
        if (c != '#')
        {
            s = (LinkList)malloc(sizeof(Node));
            s->data = c;

            r->next = s;
            r = s; // 这里将尾巴断开了 最后一个元素之后指向的区域未知 
        }
        else
        {
            flag = 0;
            r->next = NULL;// 将尾巴补充完整 可以完成完成的遍历过程
        }
    }
}

void print(LinkList L)
{
    LinkList temp = L->next;

    while (temp != NULL)
    {
        cout << temp->data << " ";
        temp = temp->next;
    }

    cout << "End of the total run" << endl;
}

void deList(LinkList L)
{
    LinkList q,p = L;
    while (p != NULL)
    {
        q = p->next;
        delete p; // delete一个指针是释放其指向的内存区域 指针的值就会变成一个随机值 (野指针)
        p = q;
    }
    L = NULL; //头结点指向的内存已经都给扬了 可以delete头指针

    //所有的结点都被delete了一次 所有的指针指向的内存都被释放了一次 这一系列的指针都成为了野指针 
}

int main(void)
{
    //Node S;
    //LinkList List = &S, * L = &List;
    //List->next = NULL;

    LinkList List, * L = &List;
    InitList(L); //初始化指针是修改指针的值 必须使用双指针否则 就会在初始化函数里面被创建一个副本 无法将修改真正实现

    create_From_Head(List);

    print(List);

    //deList(List);

    create_From_Tail(List);

    print(List);

    return 0;
}

问题我写在代码的最后deList里面了 代码太长了 麻烦给位大佬看看
想了好久了都没想过

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-09-03 00:45
    关注

    delete p; // delete一个指针是释放其指向的内存区域 指针的值就会变成一个随机值 (野指针)
    并不会,是指针指向的内存被回收,可能会被别的地方重新分配而改写,但是指针本身不会变成一个随机值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 lingo代码报错无法运行,如何解决,如果能解决请提供能够运行的lingo代码
  • ¥100 读取 IMU BNO080 数据
  • ¥15 基于RTKLIB框架写的精密单点定位-AR
  • ¥15 PFENet的预训练权重
  • ¥15 程序哪有错误怎么改?
  • ¥15 交换机和交换机之间的链路带宽以及主机带宽的理解
  • ¥15 ai创想家对战模式代码
  • ¥15 集合A由3个2行4列二维数组构成,从集合A中任意取一个二维数组元素、如果该二维数组元素的对应列位置的上、下两数都是奇数,而且仅有2个列是奇数/奇数,则该数组有意义,并放入集合B中打印输出。
  • ¥15 电信IPV6 无法外网访问吗
  • ¥15 有偿求效果比较好的遥感影像匹配的c++代码