我似乎无法弄清楚为什么每次我对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;
}
奇怪的是,每当我执行“新建”以分配新节点时,都不会发生此问题。 提前谢谢。
答案 0 :(得分:1)
您正在取消引用空指针值,从而导致未定义的行为。您需要创建Node<int>
的实例并将其分配给x
,如此
Node<int> * x = new Node<int>();
x->SetData(20);
或使用自动存储持续时间并按值声明x
。
Node<int> x;
x.SetData(20);
答案 1 :(得分:0)
Node<int> * x = nullptr;
x->SetData(20);
x
是一个空指针,您使用空指针来访问更改类的数据的类的成员函数,这将导致未定义的行为。有关详细信息,请参阅what will happen when I call member function on NULL object pointer。
您应该初始化指向类的某些对象的指针:
Node<int> * x = new Node<int>();
x->SetData(20);