stl map에서 segmentation fault가 납니다..
map<int,u_int64_t>::iterator i;
i = UM.find(atoi(f));
if (i != UM.end() && (*i).second != 0)
r.push_back((*i).second);
(다른 변수들의 속성은
map<int,u_int64_t> UM;
char *f;
vector<u_int64_t>& r; 입니다)
core파일 bt해보니깐 #3은 세번째 if줄이구요
나머지는 이렇습니다.
#0 0x0806a64f in std::less<int>::operator()(int const&, int const&) const (this=0xcccbb60, __x=@0x37373719, __y=@0x682fb908)
at /usr/include/c++/3.2/bits/stl_function.h:197
#1 0x080a0efc in std::_Rb_tree<int, std::pair<int const, unsigned long long>, std::_Select1st<std::pair<int const, unsigned long long> >, std::less<int>, std::allocator<std::pair<int const, unsigned long long> > >::find(int const&) (this=0xcccbb58, __k=@0x682fb908)
at /usr/include/c++/3.2/bits/stl_tree.h:1276
#2 0x080a009f in operator!=<std::pair<const int, u_int64_t>, std::pair<const int, u_int64_t>&, std::pair<const int, u_int64_t>*> (
__x=@0x682fb90c, __y=@0xcccbb58) at /usr/include/c++/3.2/bits/stl_tree.h:253
무조건 발생하는게 아니라 가끔 죽는거라서 이유를 잘 모르겠습니다
다른 곳에서 저 맵을 건드리는건지..락은 확실히 걸었는데 말이죠
여러분들의 조언을 구합니다..^^
thread 사용중이라면
thread를 사용중이시면
컴파일 하실때 -D_REENTRANT -D_PTHREADS 를 추가하고 컴파일 후 실행 하세요
Perl 만세~~~
Re: thread 사용중이라면
-D_THREAD_SAFE -D_REENTRANT 포함해서 컴파일 하고 있습니다 ... ^^
http://www.bdsoft.com/tools/stlfilt.html
http://www.bdsoft.com/tools/stlfilt.html
이거 한번 사용해 보시죠..
사용해 본적은 없는데. stl error 메세지를 해독해 주는 겁니다.. ^^
C++ debugging mode compile에서는-fno-de
C++ debugging mode compile에서는
-fno-default-inline
옵션을 넣어주시는 것이 core dump 해석하는데 좋습니다. inline으로 되어 있으면 call stack에는 나와 있어도 inline되어 이상한 곳으로 가기 때문이죠.
그리고, 위 backtrace가 i386 아키텍쳐에서 하는 것이라면, this pointer가 heap도아니고 stack도 아닌것이 꽤 이상한 번지에 있는 것으로 보아 다른 곳에서 버퍼 오버플로우가 일어 난듯합니다.
---
http://coolengineer.com
댓글 달기