`освобожденный указатель не был выделен` при использовании очереди 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 ответ
Я никогда раньше не использовал stxxl, но так как это шаблон, вы можете взглянуть на код здесь: http://algo2.iti.kit.edu/stxxl/trunk/queue_8h_source.html. И так как вы новичок, я объясню несколько вещей. Эта тупая очередь поддерживает очередь указателей. Строка 00054 показывает typedef ValTp value_type
так что теперь ваш int
это value_type
, 00072 и 00073 линии показывают, что ваши передние и задние элементы value_type
, Вы видите, как они будут поддерживаться как указатели. Наконец, если вы посмотрите на любой конструктор pool_type* pool
определенное в строке 00069 будет "new'd" вверх (который является основой ваших элементов) и init
функция всегда вызывается. А внутри init
, pool->steal()
называется, нажмите на него, если вы хотите узнать больше.
Короче говоря, вам нужно помещать новые целые числа в вашу очередь. Плохой интерфейс, а не ваша вина.