我有一個緩衝類在我的C++應用程序如下:的std ::矢量儲備方法無法分配足夠的內存
class Buffer
{
public:
Buffer(size_t res): _rpos(0), _wpos(0)
{
_storage.reserve(res);
}
protected:
size_t _rpos, _wpos;
std::vector<uint8> _storage;
}
有時使用構造失敗,因爲它無法分配所需的存儲空間。例如,有一次,調用構造函數與res = 37
造成以下堆棧跟蹤,我從它的核心轉儲有一個段錯誤:
#0 0x00007f916a176ed5 in raise() from /lib/libc.so.6
No symbol table info available.
#1 0x00007f916a1783f3 in abort() from /lib/libc.so.6
No symbol table info available.
#2 0x00007f916a1b33a8 in ??() from /lib/libc.so.6
No symbol table info available.
#3 0x00007f916a1b8948 in ??() from /lib/libc.so.6
No symbol table info available.
#4 0x00007f916a1bb17c in ??() from /lib/libc.so.6
No symbol table info available.
#5 0x00007f916a1bca78 in malloc() from /lib/libc.so.6
No symbol table info available.
#6 0x00007f916ac0c16d in operator new (sz=37)
at ../../.././libstdc++-v3/libsupc++/new_op.cc:52
p = <value optimized out>
#7 0x00000000004e3d11 in std::vector<unsigned char, std::allocator<unsigned char> >::reserve (this=0x7f911bc49cc0, __n=31077)
at /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.4.2/../../../../include/c++/4.4.2/ext/new_allocator.h:89
__old_size = 0
__tmp = <value optimized out>
我編譯使用GCC 4.4.2作爲64位應用程序和該應用程序我在Debian 5 x64中使用它。
任何幫助,非常感謝。 謝謝
跟蹤定義顯示res = 31077,而不是您聲稱的37。它仍然很小(至少對於64位系統),但是你可能在錯誤的地方尋找錯誤。你能從回溯中看到8幀以上的幀嗎? – Tomek 2009-12-26 13:09:39