我正在使用C ++ priority_queue数据结构来存储大量数据。但是,我总是得到分段错误,可能是由于堆栈溢出错误。我的priority_queue定义是:
typedef struct cell {
int x;
int y;
float value;
}*cell_p;
struct cell_comparator {
bool operator()(cell_p arg1, cell_p arg2) {
return arg1->value > arg2->value;
}
};
priority_queue<cell_p, vector<cell_p>, cell_comparator>* open;
并在主要功能中:
open = new priority_queue<cell_p, vector<cell_p>, cell_comparator>();
int x, y;
for (x = 0; x < nXSize; x++) {
for (y = 0; x < nYSize; y++) {
int index = (y * nXSize) + x;
cell_p c = (cell_p) malloc(sizeof(cell));
c->x = x;
c->y = y;
c->value = input_buffer[index];
open->push(c);
}
}
作为一个容器类,我使用了vector,但似乎它将数据存储在堆栈上,而不是存储在堆上。如何告诉priority_queue将数据存储在堆上?
答案 0 :(得分:0)
但是,我总是得到分段错误,可能是由于堆栈溢出错误。
您的分析很可能不正确。几乎没有理由认为你所展示的代码中有任何堆栈溢出。
如何告诉priority_queue在堆上存储数据?
它已经存在。
解决问题的一个好方法是在获得segfault时查看堆栈跟踪(并在问题中包含堆栈跟踪)。
如果这没有帮助,请提出SSCCE并张贴该内容。