2013-04-29 5 views
0

C++에서 객체를 만들 때 이상한 버스 오류가 발생합니다. 프로그램이 충돌 할 때 내 gdb를 역 추적입니다 :C++에서 새 객체를 만들려고 할 때 버스 오류가 발생했습니다.

#0 0xff146ff4 in _malloc_unlocked() from /usr/lib/libc.so.1 
#1 0xff146e40 in malloc() from /usr/lib/libc.so.1 
#2 0x24430 in __builtin_new (sz=128) at /usr/local/src/gcc-2.95.1/gcc/cp/new1.cc:84 
#3 0x1e71c in FileHeader::Allocate (this=0x3f5d8, freeMap=0x3eea0, fileSize=5719) 
    at ../filesys/filehdr.cc:63 
#4 0x1f61c in FileSystem::Create (this=0x3d8b8, name=0xffbff8f3 "test", initialSize=5719) 
    at ../filesys/filesys.cc:200 
#5 0x1ffac in Copy (from=0xffbff8e4 "assignment 2.c", to=0xffbff8f3 "test") 
    at ../filesys/fstest.cc:52 
#6 0x15150 in main (argc=3, argv=0xffbff768) at ../threads/main.cc:116 

filehdr.cc에서 코드의 해당 줄은 다음과 같습니다

IndirectHeader * s; 
s = new IndirectHeader; 

그것은 두 번째 줄에 충돌합니다. 나는 내 자신의 생성자를 명시 적으로 사용하지 않았다고 생각했지만, 하나를 추가하는 것은 도움이되지 않았다. 내가 눈치 채지 못하는 다른 간단한 문제가있는 것 같지만 찾지 못했습니다. 조언을 주시면 감사하겠습니다.

답변

2

백 트레이스에 표시되는 내용은 IndirectHeader을 다시 메모리에 할당하는 충돌입니다. 아직 객체를 생성하기 시작하지도 않았습니다. 왜냐하면 객체를위한 메모리를 할당하려고 시도하기 때문입니다. 대부분 프로그램의 초기에 힙이 손상된 버그가 있습니다.

+0

Linux에서 실행할 수있는 경우 valgrind에서 프로그램을 실행하면 손상 소스를보다 쉽게 ​​찾을 수 있습니다. –

+0

Ah 불행히도 이것은 내 OS 클래스 용이고 빌드는 solaris 서버에서 실행됩니다. valgrind와 같은 것을 설치할 수있는 권한이 없습니다. 로컬로 내 작업을 이동하려했지만 make 파일 중 일부를 다시 작성하려고 시도하면 고통 스럽습니다. 부패를 찾으려고 할 수있는 다른 트릭이 있습니까? – scotthew1

+0

그래, 내가 바운드 과거 목록에 값을 할당했다. 나는 그게 뭔가 간단하다는 걸 알아야 했어 .. – scotthew1

관련 문제