Gentoo ~amd64. Решил покопаться в C'ях. Задача следущая, написать расширяемый массив. Во время исследований этой темы получил следующий прикол.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#define N 4
#define LINE 10
int main(void)
{
    int **array;
    int i;
    array = (int **)malloc(sizeof(int) * N);
    for (i=0;i<N;i++)
    {
        array[i] = (int *)malloc(sizeof(int) * LINE);
    }
    for (i=0;i<N;i++)
    {
        array[i] = (int *)realloc(array[i], sizeof(int) * LINE * 2);
    }
    return 0;
}
На моей тачке получаю
*** glibc detected *** /tmp/untitled/untitled: realloc(): invalid old size: 0x0000000000602030 ***(gdb) bt
#0  0x00007ffff72e8ac5 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff72e9f46 in *__GI_abort () at abort.c:93
#2  0x00007ffff7323f67 in __libc_message (do_abort=2, fmt=0x7ffff74045d8 "*** glibc detected *** %s: %s: 0x%s ***\n")
    at ../sysdeps/unix/sysv/linux/libc_fatal.c:198
#3  0x00007ffff7329496 in malloc_printerr (action=3, str=0x7ffff74018bb "realloc(): invalid old size", ptr=<optimized out>) at malloc.c:6283
#4  0x00007ffff732cf6c in _int_realloc (av=0x7ffff763dea0, oldp=0x602020, oldsize=6299840, nb=96) at malloc.c:5238
#5  0x00007ffff732e489 in *__GI___libc_realloc (oldmem=0x602030, bytes=80) at malloc.c:3821
#6  0x0000000000400661 in main () at main.c:21
Есть домашний сервачек с Archlinux'ом, там собрал это дело, все отработало без glibc detected. В чем прикол, подскажите?





