我有类stackLL和pop()函数在main中使用时会产生seg错误。这是代码: 这是结构和类定义:
struct llNode{
int data;
llNode* next;
};
class stackLL{
public:
stackLL();
void push(int x);
int pop();
void print();
private:
llNode* head;
};
这里是成员函数定义:
int stackLL::pop(){
if (head == NULL){
return false;
}
else {
llNode *tmp= new llNode;
cout<<"The integer is: "<<head -> data;
tmp = head;
head = tmp -> next;
delete tmp;
return tmp -> data;
}
}
这里是main中的实现:
stackLL sll;
几行
sll.pop();
答案 0 :(得分:5)
// Pseudo code
obj1 = {
xy: {
x: 'foo',
y: this.x + 'bar'
}
}
// Working
obj2 = {
xy: (function() {
x = 'foo',
y = console.log(this.x + 'bar')
})()
}
// need to access stuff like this
obj1 = {
xy: {
x: 'foo',
y: this.x + 'bar'
}
z: xy.y
}
您在返回数据前删除delete tmp;
return tmp -> data;
。您实际上是在返回不存在或已经失效的数据
动态分配tmp
不是必需的;你可以自动分配tmp
(即tmp
)。那也可以摆脱段错误。
此外,llNode tmp = head;
的代码可能没有按照您的意图执行(或者至少,它没有执行链接列表的pop功能)。
此外,你绝不应该使用空白pop
或new
(它容易出错)。相反,使用其中一个智能指针,最好是delete
(std::unique_ptr<...>
没有引用计数器)
答案 1 :(得分:3)
你对seg故障感到惊讶吗?
delete tmp;
return tmp -> data;
答案 2 :(得分:0)
在恢复temp-&gt;数据之前,在pop()函数中,您实际上正在删除该临时节点。这就是你得到分段错误的原因。