【问题标题】:C++ LinkedList error: Access violation errorC++ 链表错误:访问冲突错误
【发布时间】:2016-04-09 06:29:50
【问题描述】:

我正在尝试在 C++ 中实现链表。以下是我的代码,我得到了这个异常

LinkedList.exe 中 0x012F4C61 处的第一次机会异常:0xC0000005:访问冲突读取位置 0xCDFCA94C。

头文件

#pragma once
#include "LinkNode.h"

class LinkedList
{
 private:
    LinkNode *head;
    LinkNode *tail;
    public:
    LinkNode add(int data);
    void print();
    LinkNode getHead();
    LinkedList(void);
    ~LinkedList(void);

    private:
    void modify();
 };

Cpp 文件

#include "stdafx.h"
#include "LinkedList.h"
#include <iostream>

using namespace std;

LinkedList::LinkedList(void)
{
 this->head = NULL;
 this->tail = NULL;
}

LinkedList::~LinkedList(void)
{ 
}


LinkNode LinkedList :: add(int data)
{
  if(this->head == NULL)
  {
    this->head = new LinkNode(data);
    this->tail = head;
    return *head;
}
else
{
    LinkNode node(data);
    tail->next = &node; 
    tail = tail->next;
 }
}

主要功能

int _tmain(int argc, _TCHAR* argv[])
{
   LinkedList linklist;
   linklist.add(1);
   linklist.add(2);
   linklist.add(3);
   linklist.add(4);
   linklist.add(5); 
   linklist.print();
   system("pause");
}

【问题讨论】:

  • 细看LinkedList::add函数,列表不为空怎么办?你不应该动态地分配一个节点吗?

标签: c++ singly-linked-list


【解决方案1】:
LinkNode node(data);
tail->next = &node; 
tail = tail->next;

node 驻留在堆栈上,它的生命周期随着控制权离开LinkedList::add 成员函数而结束。改为动态分配tail-&gt;next 节点。

析构函数还需要适当地释放动态获取的资源。目前,该程序存在内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多