我的代码似乎有用(由于上述错误,我没有尝试使用大型数据集)。
代码:
#include <iostream>
#include <queue>
#include <stxxl/queue>
int main()
{
//queue<int> q; //this works
stxxl::queue<int> q; //does not work
for (int i = 0; i<100; i++) {
q.push(i);
}
std::cout << "done copying" << std::endl;
while (q.empty() == false) {
std::cout << q.front() << std::endl;
q.pop();
}
std::cout << "done poping" << std::endl;
return 0;
}
我的简单.stxxl
只是:disk=./testfile,0,syscall
但我的错误是:
stackexchangeexample(3884) malloc: *** error for object 0x101c04000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
The program has unexpectedly finished.
我不确定如何排除故障,在这种情况下我需要释放内存吗?我还在学习c ++,很抱歉,如果这是非常基本的(这只有在我使用stxxl队列时才会发生)。
答案 0 :(得分:1)
我之前从未使用过stxxl,但由于它是一个模板,您可以在这里查看代码:http://algo2.iti.kit.edu/stxxl/trunk/queue_8h_source.html。既然你是新手,我会解释一些事情。这个愚蠢的队列维护着一个指针队列。第00054行显示typedef ValTp value_type
,因此现在int
为value_type
。 Line的00072&amp; 00073表明你的前后元素是value_type
。你看到它们将如何被维护为指针。最后,如果你查看任何构造函数,00069行上定义的pool_type* pool
将是“new'd”up(这是你的元素的基础),并且总是调用init
函数。在init
内,pool->steal()
被调用,如果您想了解更多内容,请点击它。
简而言之,您需要将新的整数推送到队列中。界面不好,不是你的错。