Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]debugger.

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Perche' non posti il codice ... ?

  3. #3
    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;

    }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.