氯的平方
2020-09-02 22:30
采纳率: 64.7%
浏览 82

关于链表中指针的问题

#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一个指针是释放其指向的内存区域 指针的值就会变成一个随机值 (野指针)
    并不会,是指针指向的内存被回收,可能会被别的地方重新分配而改写,但是指针本身不会变成一个随机值

    打赏 评论
  • wwyd123456 2020-09-04 12:00

    野指针是指未对指针变量分配地址的指针
    比如你int *p,并没有对p进行赋值,也就是p没有任何指向,这个时候p就是野指针了

    打赏 评论

相关推荐 更多相似问题