gpt4 book ai didi

c++ - 使用 stxxl 队列时为 `pointer being freed was not allocated`

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:17 25 4
gpt4 key购买 nike

我的代码似乎可以工作(由于上述错误,我还没有在大型数据集上尝试过)。

代码:

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

最佳答案

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

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

关于c++ - 使用 stxxl 队列时为 `pointer being freed was not allocated`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com