0

我似乎无法弄清楚为什么每次我对 Node 对象执行任何操作时我的程序都会崩溃。在这工作之前我无法取得任何进展......

我的问题是:每当我尝试在节点 X 上“设置数据”时,都会出现访问冲突错误。在此之前,我遇到了关于未初始化变量的运行时失败 #3。所以我将它初始化为null,我仍然得到一个错误。我以前的 Node 课程从来没有给我这个错误,所以我有点难过。任何帮助表示赞赏!

这是代码:

节点类:

#ifndef NODE
#define NODE

template <typename T>
class Node
{
public:
    Node();
    Node(T data);
    void SetData(T data);
private:
    T m_Data;

};

template <typename T>
Node<T>::Node()
{

}

template <typename T>
void Node<T>::SetData(T data)
{
    m_Data = data;
}
#endif

主要的:

#include <iostream>
#include <crtdbg.h> 
#include "Node.h"
#define _CRTDBG_MAP_ALLOC

int main()
{
     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

     Node<int> * x = nullptr;
     x->SetData(20);

     return 0;
}

奇怪的是,每当我执行“新建”来分配新节点时,都不会出现此问题.. 提前致谢。

4

2 回答 2

1

您正在取消引用导致未定义行为的空指针值。您需要创建一个实例Node<int>并将其分配给x这样

Node<int> * x = new Node<int>();
x->SetData(20);

或使用自动存储期限并按x值声明。

Node<int> x;
x.SetData(20);
于 2013-05-20T02:50:57.350 回答
0
  Node<int> * x = nullptr;
  x->SetData(20);

x是一个空指针,你使用空指针访问你的类的成员函数来改变你的类的数据,它会导致未定义的行为。查看当我在 NULL 对象指针上调用成员函数以获取更多信息时会发生什么。

您应该初始化指向您的类的某些对象的指针:

  Node<int> * x = new Node<int>();
  x->SetData(20);
于 2013-05-20T02:49:50.037 回答