[ninux-dev] [C, Alfred] Segmentation fault su linked list

Germano Massullo germano.massullo at gmail.com
Wed Nov 18 14:54:52 CET 2015


Alfred[2] quando stampa la topologia della rete (nei vari formati JSON
disponibili), fa delle iterazioni leggendo dalla socket UNIX del
servizio batman, scrivendo di volta in volta su una stessa struct che
poi da in pasto a delle printf.
Il formato di output NetJSON che sto tentando di realizzare, elenca
tutti i link tra i nodi alla fine del file, in separata sede rispetto
all'elenco delle proprietà degli stessi, perciò occorre modificare tale
approccio in quanto al termine di una iterazione, se si tenta di
rieseguire la sopracitata lettura, non si trova alcunché.
Ora a prescindere da cosa inneschi la comunicazione tra il servizio
batman ed alfred, dato che a me interessa memorizzare da una parte i
dati della topologia di rete, ho creato una linked list, dove ogni
pezzetto è una "passata di lettura" della socket.

Solo dopo esser riuscito a generare un output NetJSON completo allora
passerò ad una fase di ottimizzazione del codice per renderlo conforme
allo stile del codice degli sviluppatori Alfred.

Attualmente le chiamate di funzione coinvolte nel problema che sto per
descrivervi sono:
main (vis.c:1086) --> vis_get_data (vis.c:959) --> vis_read_answer
(vis.c:889) --> insert_netjson_entry (vis.c:757)


***************************************
*descrizione di alcune porzioni di codice*
***************************************

(in vis.c) void insert_netjson_entry(struct vis_v1_extended**
vis_data_collection_tail, struct vis_v1* data)
prende la struct popolata dalla n-esima passata di lettura dalla socket
UNIX e ne memorizza i dati su una struct temporanea, dopodiché prende
quest'ultima e la inserisce nella coda della linked list

(in vis.h) struct vis_v1_extended
È la versione "linked list" di struct vis_v1 che è la struttura dove
vengono memorizzati i dati di un singolo nodo durante la "passata di
lettura" sulla socket UNIX.

***********
*problema*
***********
All'indirizzo di StackOverflow [1] trovate una descrizione del piccolo
problema che sto avendo durante l'inserimento del nuovo oggetto in coda
alla linked list. Per quanto riguarda la soluzione che mi viene proposta
non riesco a capirne il senso. Facendo
p->next = *vis_data_collection_tail;
si imposta come "next" della struct temporanea, la coda della linked
list. Io invece vorrei fare proprio il contrario.

Suggerimenti?

[1]:
http://stackoverflow.com/questions/33779975/segmentation-fault-in-copying-structures-data-into-a-linked-list
[2]: http://www.open-mesh.org/projects/alfred




More information about the ninux-dev mailing list