LINUX.ORG.RU

assert заглючил?


0

0

Сабж :(
При добавлении конструкции assert(convient_row != MATRIX_ERR) прога валится
с сообщением:
*** glibc detected *** ./matrix: realloc(): invalid next size: 0x087620a8 ***
Aborted

Однако если сделать if (convient_row == MATRIX_ERR) {...} никаких проблем нет. MATRIX_ERR это "#define MATRIX_ERR -1" а convient_row  это size_t.

Бред какой-то, нет?
anonymous

Ответ на: комментарий от max_posedon

ничего не забыл, собрано с -ggdb: *** glibc detected *** /var/home/exelap/svn/KURSACH-2008_spring/matrix: realloc(): invalid next size: 0x099c80a8 ***

Program received signal SIGABRT, Aborted. 0xb7f75424 in __kernel_vsyscall () (gdb) bt #0 0xb7f75424 in __kernel_vsyscall () #1 0x42f2dba7 in raise () from /lib/libc.so.6 #2 0x42f2f15e in abort () from /lib/libc.so.6 #3 0x00000000 in ?? () (gdb)

anonymous
()
Ответ на: комментарий от max_posedon

ничего не забыл, собрано с -ggdb: *** glibc detected *** /var/home/exelap/svn/KURSACH-2008_spring/matrix: realloc(): invalid next size: 0x099c80a8 ***

Program received signal SIGABRT, Aborted. 0xb7f75424 in __kernel_vsyscall () (gdb) bt #0 0xb7f75424 in __kernel_vsyscall () #1 0x42f2dba7 in raise () from /lib/libc.so.6 #2 0x42f2f15e in abort () from /lib/libc.so.6 #3 0x00000000 in ?? () (gdb)

anonymous
()
Ответ на: комментарий от max_posedon

ничего не забыл, собрано с -ggdb:
*** glibc detected *** /var/home/exelap/svn/KURSACH-2008_spring/matrix: realloc(): invalid next size: 0x099c80a8 ***

Program received signal SIGABRT, Aborted.
0xb7f75424 in __kernel_vsyscall ()
(gdb) bt
#0  0xb7f75424 in __kernel_vsyscall ()
#1  0x42f2dba7 in raise () from /lib/libc.so.6
#2  0x42f2f15e in abort () from /lib/libc.so.6
#3  0x00000000 in ?? ()
(gdb) 

anonymous
()

Возможно где-то раньше кто-то насрал в не ту память. Под valgrind'ом прогу прогони.

Reset ★★★★★
()
Ответ на: комментарий от Reset

оки, буду valgrindом гонять. Решил что вдруг проблема не у меня и обновил glibc :). Теперь оно даже внятный бэктрейс пишет:

*** glibc detected *** ./matrix: realloc(): invalid next size: 0x0908a0a8 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7e450c0]
/lib/libc.so.6[0xb7e484c6]
/lib/libc.so.6(__libc_realloc+0xf8)[0xb7e48e48]
/lib/libc.so.6[0xb7e48ff1]
/lib/libc.so.6(__libc_realloc+0x3c)[0xb7e48d8c]
/lib/libc.so.6(vasprintf+0xfb)[0xb7e3dfeb]
/lib/libc.so.6(__asprintf+0x2e)[0xb7e22e0e]
/lib/libc.so.6(__assert_fail+0xb0)[0xb7e00660]
./matrix[0x8048e49]
./matrix[0x80486dd]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7df3dbc]
./matrix[0x8048591]
======= Memory map: ========
08048000-0804a000 r-xp 00000000 08:07 193531     /var/home/exelap/svn/KURSACH-2008_spring/matrix
0804a000-0804b000 rw-p 00001000 08:07 193531     /var/home/exelap/svn/KURSACH-2008_spring/matrix
0908a000-090ab000 rw-p 0908a000 00:00 0          [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0 
b7c21000-b7d00000 ---p b7c21000 00:00 0 
b7ddd000-b7dde000 rw-p b7ddd000 00:00 0 
b7dde000-b7f0b000 r-xp 00000000 08:06 118089     /lib/libc-2.7.so
b7f0b000-b7f0c000 r--p 0012d000 08:06 118089     /lib/libc-2.7.so
b7f0c000-b7f0e000 rw-p 0012e000 08:06 118089     /lib/libc-2.7.so
b7f0e000-b7f12000 rw-p b7f0e000 00:00 0 
b7f18000-b7f21000 r-xp 00000000 08:06 361575     /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1
b7f21000-b7f22000 rw-p 00009000 08:06 361575     /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1
b7f22000-b7f23000 rw-p b7f22000 00:00 0 
b7f23000-b7f24000 r-xp b7f23000 00:00 0          [vdso]
b7f24000-b7f3f000 r-xp 00000000 08:06 116376     /lib/ld-2.7.so
b7f3f000-b7f41000 rw-p 0001a000 08:06 116376     /lib/ld-2.7.so
bfc2c000-bfc41000 rw-p bffeb000 00:00 0          [stack]
Aborted


Похоже внатуре я память где-то испоганил. Причем как-то хитро, без ассерта всё работает :(

anonymous
()
Ответ на: комментарий от anonymous

ооо, чуваки, нашёл :). спасибо valgrind, оказался off by one косяк с указателем. Никогда не думал что это может так заглючить прогу.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.