提问人:Ancient_Spirit 提问时间:11/9/2023 最后编辑:Ancient_Spirit 更新时间:11/9/2023 访问量:82
模板类变量在更改时出现段错误 [重复]
Template class variable giving segment fault when changing it [duplicate]
问:
我遇到的问题出在我的功能中。我正在尝试将变量设置为 ,传递到函数中的变量,但每次尝试时都会遇到分段错误。set_data()
data_field
d
这是调用类的函数
对于测试运行变量是我尝试添加到节点data_field的 int。 i 的 int 值为 。i
i
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;
}
它输出哪个是 D 的正确值。取消注释会导致分段错误。0
data_field = d
答:
0赞
Darius
11/9/2023
#1
在这种情况下,您需要初始化 temp 以指向有效内容。最简单的就是去做auto temp = new dnode<T>();
评论
dnode
dnode->set_data
null
null
temp
auto temp = new dnode<T>*();