我遇到的问题是我的
set_data()
功能。我试图将 data_field
变量设置为 d
,即传递到函数中的变量,但每当我尝试时,我都会遇到分段错误。
这是调用类的函数
对于测试运行变量
i
是一个 int,我试图将其添加到节点 data_field 中。 i
i 的 int 值为 i = 0
。
template<class T>
void dlist<T>::rear_insert(T i){
dnode<T>* temp;
temp -> set_data(i); // function call that is causing the segmentation fault
if(tail == nullptr ){
tail = temp;
head = temp;
} else {
dnode<T>* temp1 = tail;
tail -> set_next(temp);
tail = tail -> next();
tail -> set_previous(temp1);
}
}
这是我在课堂上使用的完整代码,给我带来了错误
template<class T>
class dnode{
public:
dnode(T d = T(), dnode *n = NULL, dnode *p = NULL) {data = d; next = n; previous = p;}
void set_data(T d){
data_field = d; //The line that gives
//segmentation fault
}
void set_next(dnode *n){next_field = n;}
void set_previous(dnode *p){previous_field = p;}
T data()const {return data_field;}
dnode* next() const {return next_field;}
dnode* previous() {return previous_field;}
private:
T data_field;
dnode* next_field;
dnode* previous_field;
};
我使用 cout 来检查它是否接收到正确的数据,并且是否能够将正确的数据打印到文件中。问题在于
data_field = d
。我查看了其他来源,他们已经像我一样设置了代码,我不确定为什么我会遇到分段错误。
void set_data(T d){
cout << d;
//data_field = d;
}
输出
0
,这是 d 的正确值。取消注释 data_field = d
会导致分段错误。
问题的答案是Darius在我问题的评论部分给出的