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

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。