PDA

Visualizza la versione completa : realloc in C


diamond84
07-10-2010, 21:38
ciao a tutti , ho un piccolo problema riguardante i grafi. a partire da questa procedura di creazione del grafo ne ho scriito una per aggiungere un nodo al grafo esistente. il programma va in crash sulla linea in cui rialloco con realloc la memoria per il grafo ingrandendola per il nodo aggiuntivo. Grazie a chi risponderÓ.

Graph graph_create(int n)
{
Graph g;
int i;

g = malloc(sizeof(struct graph) + sizeof(struct successors *) * (n-1));
assert(g);

g->n = n;
g->m = 0;

for(i = 0; i < n; i++) {
g->alist[i] = malloc(sizeof(struct successors));
assert(g->alist[i]);

g->alist[i]->d = 0;
g->alist[i]->len = 1;
g->alist[i]->is_sorted= 1;
}

return g;
}



void add_vertex(Graph g)
{
Graph tmp = realloc(g, sizeof(struct successors *));
if (tmp != NULL)
{
g = tmp; /* OK, nuovo assegnamento, pi¨ grande di p */

assert(g);

int numVert = graph_vertex_count(g)+1;

g->n = numVert;

g->alist[numVert-1] = malloc(sizeof(struct successors));
assert(g->alist[numVert-1]);

g->alist[numVert-1]->d = 0;
g->alist[numVert-1]->len = 1;
g->alist[numVert-1]->is_sorted= 1;

}

else

{

printf("errore");
}
}

Scara95
07-10-2010, 22:34
Magari a realloc serve la nuova dimensione totale xD, comunque non ho molto capito il codice...
Potresti postare le strutture?

Loading