Segmentation Fault - Может ли другая версия glib-c сделать что-то подобное?

У меня проблемы с выделением / освобождением памяти.

На «64-битной машине» я запустил некоторый c-код, который не дал мне ошибки. Если я запускаю тот же код на 32-битной машине (после повторной компиляции, очевидно), у меня возникают проблемы с ошибкой сегментации.

Это моя версия glib-c:

Пакет: libc6
Новинка: да Состояние: установлен Автоматически устанавливается: нет Версия: 2.13-20ubuntu5 Приоритет: обязательно Раздел: библиотеки Сопровождение: Разработчики Ubuntu Несжатый Размер: 10,7 M Зависит от: libc-bin (= 2.13-20ubuntu5), libgcc1, tzdata Предлагает: glibc-doc, debconf | debconf-2.0, локали Конфликты: belocs-locales-bin, belocs-locales-bin, libc6-amd64, libc6-amd64, предварительная ссылка (<0,0.20090925), предварительная ссылка (<0,0.20090925), цдата (< 2007k-1), tzdata (<2007k-1), tzdata-etch, tzdata-etch Разрывы: nscd (<2.13), nscd (<2.13), libc6 (! = 2.13-20ubuntu5) Заменяет: belocs-locales-bin, belocs-locales-bin, libc6-amd64, libc6-amd64, libc6 (<2.13-20ubuntu5) Предоставляет: glibc-2.13-1 Описание: libreria C GNU embedded: librerie condivise

На 32-битной машине версия:

2.06-01

Более того, вот фрагмент кода, который сводит меня с ума:

void estrai_libro (FILE* fileDescriptor, Libro* libroLetto) {

char* ptr_buf;
size_t n;
size_t lung;
ssize_t nread;

/* ---- questo blocco di istruzioni verrà utilizzato per tutti
    i campi della struttura Libro passata in input */
/* inizializzo ptr_buf e n rispettivamente a NULL e a 0 in moda da
   da sfruttare al meglio la getline(...)*/     
ptr_buf = NULL;
n = 0;
/* copio all'interno del buffer ptr_buf il contenuto di una riga
       del file; la funzione getline legge dal file fino a quando non
   incontra uno \n (ecco perchè io formatto gli input) */
nread = getline (&ptr_buf, &n, fileDescriptor);
/* calcolo la lunghezza della stringa letta */
lung = strlen (ptr_buf);
/* istanzio una zona di memoria della stessa dimensione della stringa
   letta e fatta puntare dal campo titolo della struttura Libro */
libroLetto->titolo = (char*) malloc (lung*sizeof(char));
/* inizializzo la zona di memoria istanziata con degli 0 */
memset (libroLetto->titolo, 0, sizeof(libroLetto->titolo));
/* copio la stringa letta e contenuta in ptr_buf nel campo titolo
   della struttura Libro passata in input (libroLetto). */
strcpy (libroLetto->titolo,ptr_buf);
free (ptr_buf);
/* ---- fine blocco*/
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
lung = strlen (ptr_buf);
libroLetto->autore = (char*) malloc (lung*sizeof(char));
memset (libroLetto->autore, 0, sizeof(libroLetto->autore));
strcpy (libroLetto->autore,ptr_buf);
free (ptr_buf);
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
lung = strlen (ptr_buf);
libroLetto->editore = (char*) malloc (lung*sizeof(char));
memset (libroLetto->editore, 0, sizeof(libroLetto->editore));
strcpy (libroLetto->editore,ptr_buf);
free (ptr_buf);
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
lung = strlen (ptr_buf);
libroLetto->data_pubblicazione = (char*) malloc (lung*sizeof(char));
memset (libroLetto->data_pubblicazione, 0, sizeof(libroLetto->data_pubblicazione));
strcpy (libroLetto->data_pubblicazione,ptr_buf);
free (ptr_buf);
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
lung = strlen (ptr_buf);
libroLetto->num_pagine = (char*) malloc (lung*sizeof(char));
memset (libroLetto->num_pagine, 0, sizeof(libroLetto->num_pagine));
strcpy (libroLetto->num_pagine,ptr_buf);
free (ptr_buf); 
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
lung = strlen (ptr_buf);
libroLetto->num_copie = (char*) malloc (lung*sizeof(char));
memset (libroLetto->num_copie, 0, sizeof(libroLetto->num_copie));
strcpy (libroLetto->num_copie,ptr_buf);
free (ptr_buf);
ptr_buf = NULL;
n = 0;
nread = getline (&ptr_buf, &n, fileDescriptor);
free (ptr_buf);
}

У кого-то есть идеи ?

Моя первая была связана с версией glib-c, но теперь я не могу

достичь 32-битной машины и «обновить» эту библиотеку. Итак, кто-нибудь может обратиться ко мне?

edit: Для ясности, ошибка сегментации предшествует свободному (ptr_buf)

0
задан DonCallisto 27 February 2012 в 19:48
поделиться