氯的平方 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条)

报告相同问题?

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集