Matcha芥末酱 2023-09-25 17:34 采纳率: 37.5%
浏览 15
已结题

链表入队的指针内存问题

在Qt上用链表进行队列的出入队操作,当需要处理的数据量比较大的时候,程序会在某次入队的为指针分配内存处中断

void Queue::enqueue(const QPoint xy,const QPoint dad){
    Point* point_ ;
    point_=new Point;
    point_->fatherpoint=dad;
    point_->xy=xy;
    point_->next=nullptr;
    if(isEmpty()){
        front=rear=point_;
    }else{
        rear->next=point_;
        rear=point_;
    }
}

这是一个链表的入队操作,Point是我自定义的一个类,每次程序都会在point_=new Point;这行中断。这个入队操作的point_指针是没法delete的,因为尾节点和point_指针指向同一处内存。但是当我需要调用这个函数的次数变多的时候,就会中断。我想知道具体的原因以及解决办法。
我看有博客写的是多次用同一个指针开辟内存会导致问题https://blog.csdn.net/sieyoo/article/details/51105396。但是就算我改成建立一个可扩容的指针数组来每次初始化数组中的不同指针最终也会在qarraydata.cpp的headerSize > size_t(MaxAllocSize)和QArrayData *header = static_cast<QArrayData *>(::malloc(allocSize));这两行中断。所以说有没有人能给出一个切实可行的解决方案啊

  • 写回答

18条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-25 18:17
    关注
    获得0.60元问题酬金

    引自免费小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    对于FIFO队列,入队操作应该是往队列的尾部添加新节点,而不需要修改头节点。我之前给出的代码示例有误,请忽略。

    在你的代码中,每次入队操作的逻辑是正确的,只需要修改一点来释放前一个节点,从而避免内存泄漏。这样:

    void Queue::enqueue(const QPoint xy,const QPoint dad){
        Point* point_ = new Point;
        point_->fatherpoint = dad;
        point_->xy = xy;
        point_->next = nullptr;
     
        if (isEmpty()){
            front = rear = point_;
        } else {
            rear->next = point_;
            rear = point_;
        }
     
        // 释放前一个节点
        if (front != nullptr) {
            Point* temp = front;
            front = front->next;
            delete temp;
        }
    }
    

    在每次入队操作后,如果队列不为空(即front指针不为空),就将front指针指向下一个节点,然后删除前一个节点。这样确保了队列的FIFO特性,并且避免了内存泄漏。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义
  • ¥15 嵌入式--定时器使用
  • ¥20 51单片机学习中的问题