3

我的代码似乎有效(由于上述错误,我没有尝试过使用大型数据集)。

代码:

#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 队列时)。

4

1 回答 1

1

我以前从未使用过 stxxl,但由于它是一个模板,您可以在这里查看代码:http: //algo2.iti.kit.edu/stxxl/trunk/queue_8h_source.html。既然你是新手,我会解释一些事情。这个愚蠢的队列维护着一个指针队列。行 00054 显示typedef ValTp value_type,所以现在你intvalue_type. Line 的 00072 和 00073 表明您的前后元素属于value_type. 您是否看到它们将如何作为指针进行维护。最后,如果您查看任何构造函数,第pool_type* pool00069 行定义的将被“新建”(这是您的元素的基础),并且init始终调用该函数。内init,pool->steal()被称为,如果您想了解更多信息,请单击它。

简而言之,您需要将新的整数推送到您的队列中。界面不好,不是你的错。

于 2012-05-14T15:06:43.503 回答