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. ラインの 00072 & 00073 は、フロントとバックの要素がそれであることを示していますvalue_type。それらがポインターとしてどのように維持されるかがわかりますか。最後に、任意のコンストラクターを見ると、pool_type* pool00069 行で定義されたものが "new'd" され (これが要素の基礎になります)、init関数は常に呼び出されます。init詳細については、をpool->steal()クリックしてください。

つまり、新しい整数をキューにプッシュする必要があります。あなたのせいではなく、インターフェースが悪い。

于 2012-05-14T15:06:43.503 に答える