Errore su di una malloc...
questa malloc čun una funzione che iene richiamaa all'interno di un ciclo for.
La prima volta che vene chiamata la malloc funziona... la seconda no...
La domanda č: con gdb cosa devo andare a vedere per scoprire l'errore?
Errore su di una malloc...
questa malloc čun una funzione che iene richiamaa all'interno di un ciclo for.
La prima volta che vene chiamata la malloc funziona... la seconda no...
La domanda č: con gdb cosa devo andare a vedere per scoprire l'errore?
Perche' non posti il codice ... ?
In questa funzione viene fuori il segmentation fault...
//Dato un vertice ne restituisce il link
l_contatti * make_link(int vertice)
{
l_contatti * linkcor, * link;
int i, j, edge, edge2, edge3;
l_el_contatti * triangoli, *tri_cor, * linkcorr_el;
int * C_el;
int * acaso;
triangoli = NULL;
link = NULL;
linkcor= NULL;
C_el = vertex_list[vertice].C;
printf("Vertice %d \n", vertice);fflush(stdout);
//dalla lista degli edge tiro fuori i triangoli... o il punto (che allora va gia' separato)
for(i=0; i<vertex_list[vertice].Csize; i++)
{
edge = vertex_list[vertice].C[i];
for(j=0; j<edge_list[edge].Csize; j++)
triangoli = insert_l_el_contatti(triangoli, edge_list[edge].C[j]);
if(edge_list[edge].Csize == 0)//se questo e' un wire edge... aggiungo solo il punto che č parte del link.
{
linkcor = (l_contatti *) malloc(sizeof(l_contatti));
linkcor->type = 0;
if(edge_list[edge].v1 == vertice)
linkcor->id = edge_list[edge].v2;
else
linkcor->id = edge_list[edge].v1;
linkcor->next = link;
link = linkcor;
printf(" %d(vertice) ",linkcor->id);fflush(stdout);
}
}
//dalla lista dei triangoli tiro fuori l'unico edge che non tocca il vertice e lo aggiungo alla lista
printf("qui ci arrivo\n");fflush(stdout);
linkcor = (l_contatti*) malloc(sizeof(l_contatti));
linkcor->type = 1;
linkcor->next = NULL;
tri_cor = triangoli;
while(tri_cor!= NULL)
{
edge = tri_list[tri_cor->id].edg1;
edge2 = tri_list[tri_cor->id].edg2;
edge3 = tri_list[tri_cor->id].edg3;
linkcorr_el = (l_el_contatti *) malloc(sizeof(l_el_contatti));
linkcorr_el->next = NULL;
if(edge_list[edge].v1 != vertice && edge_list[edge].v2 != vertice)
linkcorr_el->id = edge;
else if(edge_list[edge2].v1 != vertice && edge_list[edge2].v2 != vertice)
linkcorr_el->id = edge2;
else
linkcorr_el->id = edge3;
printf(" %d(edge) ",linkcorr_el->id);fflush(stdout);
linkcorr_el->next = linkcor->el_contatti;
linkcor->el_contatti = linkcorr_el;
tri_cor = tri_cor->next;
}
printf("\n",linkcorr_el->id);fflush(stdout);
linkcor->next = link;
link = linkcor;
return link;
}
/**************************************************/
E questo č il ciclo dove viene chiamata la funzione sopra
for(j=0;j<graph.numVertices;j++)//ciclo sui nodi
{
aux1=graph.vertices[j].edges;
while (aux1!=NULL)//ciclo sugli edge del nodo
{
aux2 = aux1->contatti;
while (aux2!=NULL)//ciclo sui tagli
{
if(aux2->type==1)//cerco link solo nelle catene di edge ovviamente
{
aux3 = aux2->el_contatti;
while (aux3!=NULL)//ciclo sulle componenti del taglio
{
//per ogni vertice cerco il link. metto tutti gli edge trovati in una lista
link = make_link(aux3->id);
unionelink = append_contatti(link, unionelink);
//elimino gli edge che contengono un vertice della catena degli edge
//unionelink = cleanlink(unionelink);
//ci faccio una catena o piu' catene ordinate
//catene_link = separacatene(unionelink);
//Data la catena ottenuta dal link dei vertici, trova tutti i tagli
//linkToCuts(catene_link);
//sostituisco questi nuovi tagli a quello unico da cui sono partita
aux3 = aux3->next;
}
}
aux2=aux2->next;
}
aux1=aux1->next;
}
}