에게 할당 실패표준 : : 벡터 예약 방법은 다음과 같이 내 C++에서 응용 프로그램을 버퍼 클래스가 충분한 메모리
class Buffer
{
public:
Buffer(size_t res): _rpos(0), _wpos(0)
{
_storage.reserve(res);
}
protected:
size_t _rpos, _wpos;
std::vector<uint8> _storage;
}
때때로 생성자를 사용하여 실패 때문에 필요한 메모리 공간을 할당 할 수 없습니다. 내가 64 비트 응용 프로그램과 같은 GCC 4.4.2 사용이 응용 프로그램을 컴파일 한
#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>
예를 들어, 한 번, res = 37
로 생성자를 호출 내가 핵심 덤프에서 가져온 다음과 같은 스택 추적과 세그먼트 폴트를 발생 데비안 5 x64에서 사용하고 있습니다.
도움을 주시면 감사하겠습니다. 감사합니다
흔적은 분명히 당신이 주장하는대로 res = 31077이지 37이 아니라는 것을 보여줍니다. 여전히 작지만 (적어도 64 비트 시스템의 경우) 잘못된 장소에서 오류를 찾고있을 것입니다. 백 트레이스에서 프레임 8 이상을 표시 할 수 있습니까? – Tomek