2011-02-04 37 views
5

Tôi vừa viết một đoạn mã CPP và tôi đã biên dịch nó bằng G ++ trong ubuntu. Khi tôi chạy mã tất cả mọi thứ của tôi là tốt, mã chạy tốt và cho sản lượng nhưng không thoát ra và nó mang lại cho lỗi này:Tôi nhận được lỗi này: "glibc detection"

 
*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09f931f0 *** 
======= Backtrace: ========= 
/lib/libc.so.6(+0x6c501)[0x3de501] 
/lib/libc.so.6(+0x6dd70)[0x3dfd70] 
/lib/libc.so.6(cfree+0x6d)[0x3e2e5d] 
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x6e2441] 
./a.out[0x8049ce6] 
/lib/libc.so.6(+0x2f69e)[0x3a169e] 
/lib/libc.so.6(+0x2f70f)[0x3a170f] 
/lib/libc.so.6(__libc_start_main+0xef)[0x388cef] 
./a.out[0x8048a61] 
======= Memory map: ======== 
00219000-0021a000 r-xp 00000000 00:00 0   [vdso] 
00354000-00370000 r-xp 00000000 08:01 8781845 /lib/ld-2.12.1.so 
00370000-00371000 r--p 0001b000 08:01 8781845 /lib/ld-2.12.1.so 
00371000-00372000 rw-p 0001c000 08:01 8781845 /lib/ld-2.12.1.so 
00372000-004c9000 r-xp 00000000 08:01 8781869 /lib/libc-2.12.1.so 
004c9000-004ca000 ---p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004ca000-004cc000 r--p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004cc000-004cd000 rw-p 00159000 08:01 8781869 /lib/libc-2.12.1.so 
004cd000-004d0000 rw-p 00000000 00:00 0 
00638000-00717000 r-xp 00000000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
00717000-0071b000 r--p 000de000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071b000-0071c000 rw-p 000e2000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071c000-00723000 rw-p 00000000 00:00 0 
00909000-0092d000 r-xp 00000000 08:01 8781918 /lib/libm-2.12.1.so 
0092d000-0092e000 r--p 00023000 08:01 8781918 /lib/libm-2.12.1.so 
0092e000-0092f000 rw-p 00024000 08:01 8781918 /lib/libm-2.12.1.so 
00fdb000-00ff5000 r-xp 00000000 08:01 8781903 /lib/libgcc_s.so.1 
00ff5000-00ff6000 r--p 00019000 08:01 8781903 /lib/libgcc_s.so.1 
00ff6000-00ff7000 rw-p 0001a000 08:01 8781903 /lib/libgcc_s.so.1 
08048000-0804b000 r-xp 00000000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804b000-0804c000 r--p 00002000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804c000-0804d000 rw-p 00003000 08:01 8652645 /home/akg/Desktop/contest/a.out 
09f93000-09fb4000 rw-p 00000000 00:00 0   [heap] 
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b7765000-b7768000 rw-p 00000000 00:00 0 
b7775000-b7779000 rw-p 00000000 00:00 0 
bf9a7000-bf9c8000 rw-p 00000000 00:00 0   [stack] 
Aborted 

này có nghĩa là gì? Làm sao để tôi thoát khỏi nó? Tôi không sử dụng malloc hoặc miễn phí, tôi chỉ sử dụng véc tơ!

Trả lời

14

Thậm chí nếu bạn không phân bổ trực tiếp bộ nhớ, nó sẽ xảy ra dưới mui xe trong mã vector và bạn rất có thể đã làm hỏng một số phần bộ nhớ bằng cách viết nơi bạn không được phép. Những lý do có khả năng nhất mà tôi có thể nghĩ đến là:

  1. Viết đến một yếu tố đó là ngoài giới hạn
  2. Sử dụng một con trỏ/tham chiếu đến một yếu tố đó không còn giá trị - lưu ý rằng chèn nhiều yếu tố có thể làm mất hiệu lực tài liệu tham khảo trước đó

Tất nhiên, tôi không thể chắc chắn trừ khi bạn đăng một số mã có liên quan. Hoặc thử sử dụng valgrind để tìm nguồn gốc của sự cố.

+4

+1 cho valgrind - BTW, đây là liên kết: http://valgrind.org/ –

5

Điều này có nghĩa là bạn được gọi là free trên con trỏ không hợp lệ (ví dụ: con trỏ không được cấp phát qua malloc hoặc bạn đã giải phóng).

Dán một số mã, nếu không thì không thể nói tại sao điều này xảy ra.

+3

Điều đó cũng có nghĩa là dữ liệu quản lý heap malloc đã bị hỏng – bdonlan

+0

Vâng, đúng vậy là – peoro

Các vấn đề liên quan