Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    53

    [c]malloc che ritorna un NULL

    Ciao a tutti.
    Quali sono i casi in cui una malloc ritorna un NULL (oltre al fatto che la memoria è esaurita)?
    Ho un programma che acquisisce un grafo da file. Con grafi di piccole dimensioni nessun problema, quando provo a dargli un grafo da 100 nodi alla prima allocazione:
    codice:
    vertice =(vertice_grafo_t *)malloc(sizeof(vertice_grafo_t));
    if(vertice == NULL)
        {
           printf("Memoria esaurita\n");
           exit(1);
        }
    il valore di vertice è NULL...esiste un motivo??? La memoria non si esaurisce, ho controllato tramite il monitor di sistema che dice in tempo reale la memoria consumata.
    Cosa può essere?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    malloc non ritorna NULL quando la memoria è esaurita, ma quando non riesce ad allocarla (per un motivo qualunque). Quindi, dopo un'invocazione fallita di malloc (ovvero, malloc ha restituito NULL), la memoria non è di certo cambiata. Non ha, quindi, alcun senso controllare cosa succede alla memoria DOPO che tale invocazione è fallita. Ha senso controllare PRIMA se la memoria è sufficiente per l'invocazione richiesta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    53
    Originariamente inviato da LeleFT
    malloc non ritorna NULL quando la memoria è esaurita, ma quando non riesce ad allocarla (per un motivo qualunque).
    Ma è possibile che questo "fallimento" sia sistematico al primo nodo che provo ad allocare???
    Come posso risolvere? Un rimedio plssss

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quanto vale

    sizeof(vertice_grafo_t)

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    53
    Originariamente inviato da oregon
    Quanto vale

    sizeof(vertice_grafo_t)

    ?
    ti riporto la struttura di vertice_grafo_t:
    codice:
    /*struttura vertice*/
    typedef struct vertice_grafo
    {            
        int nome;
        double fitness;
        struct vertice_grafo *next;
        struct arco_grafo *lista_archi;
        int distanza;
        struct vertice_grafo *padre;
        colore_t colore;
    } vertice_grafo_t;

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... mi sembra strano che ti restituisca NULL ...

    Bisognerebbe fare un po' di debugging ...

    Comunque, prova a visualizzare il valore di sizeof(vertice_grafo_t) poco prima della malloc.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    53
    In che modo posso visualizzarlo?

  8. #8
    Originariamente inviato da Iso90
    ti riporto la struttura di vertice_grafo_t:
    codice:
    /*struttura vertice*/
    typedef struct vertice_grafo
    {            
        int nome;
        double fitness;
        struct vertice_grafo *next;
        struct arco_grafo *lista_archi;
        int distanza;
        struct vertice_grafo *padre;
        colore_t colore;
    } vertice_grafo_t;
    puoi riportare anche arco_grafo e colore_t?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    53
    Certo ecco qua:
    codice:
    /*tipo colore*/
    typedef enum {bianco, nero, grigio} colore_t;
    
    /*struttura arco*/
    typedef struct arco_grafo
    {
        double peso;
        struct vertice_grafo *vertice_adiac;
        struct arco_grafo *next;
    } arco_grafo_t;

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In che modo posso visualizzarlo?
    Con una printf naturalmente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.