使用stxxl队列时,“未释放指针”

时间:2012-05-13 19:12:46

标签: c++ stxxl

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

代码:

#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队列时才会发生)。

1 个答案:

答案 0 :(得分:1)

我之前从未使用过stxxl,但由于它是一个模板,您可以在这里查看代码:http://algo2.iti.kit.edu/stxxl/trunk/queue_8h_source.html。既然你是新手,我会解释一些事情。这个愚蠢的队列维护着一个指针队列。第00054行显示typedef ValTp value_type,因此现在intvalue_type。 Line的00072&amp; 00073表明你的前后元素是value_type。你看到它们将如何被维护为指针。最后,如果你查看任何构造函数,00069行上定义的pool_type* pool将是“new'd”up(这是你的元素的基础),并且总是调用init函数。在init内,pool->steal()被调用,如果您想了解更多内容,请点击它。

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