【发布时间】:2020-08-28 11:21:16
【问题描述】:
我想实现一个固定大小的队列,我可以很容易地使用一个结构体,该结构体具有一个队列作为数据成员之一和一个负责队列推送部分的成员函数,但我想尝试一下像这样继承队列。
template<typename T>
struct f_queue : public queue<T>{
int n;
T prev;
f_queue(int n_):
n(n_){}
void push(T data){
if(this->size() < this->n){
this->push(data);
}else{
prev = this->front();
this->pop();
this->push(data);
}
}
};
这编译得很好,但由于某种原因它给出了一个分段错误并且 gdb 说
程序收到信号SIGSEGV,分段错误。 0x0000555555555862 在 std::_Deque_iterator
::_S_buffer_size() ()
不确定这是什么意思?当尝试执行 backtrace 时,输出结果为
#9913 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9914 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9915 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9916 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9917 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9918 0x0000555555554ec6 in f_queue<int>::push(int) ()
#9919 0x0000555555554ec6 in f_queue<int>::push(int) ()
不停止无限。需要帮助。提前致谢。
【问题讨论】:
-
您使用
this->push(data);引入了递归(可能是无意的)。我假设,您实际上希望queue<T>::push(data);引用基类的push()。
标签: c++ stl segmentation-fault queue