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

    [C] Problema di memoria con strutture dinamiche

    Salve,
    vi copio subito il codice che mi da problemi:

    codice:
    int main(int argc, char *argv[])
    {
    	typedef struct edge
    	{
    		int key;
    	} edge;
    	
    	typedef struct graph
    	{
    		edge **adj;
    	} graph;
    	
    	graph *array;
    	int i;
    	
    	array = (graph *)malloc(sizeof(graph));
    	array->adj = (edge **)malloc(5*sizeof(edge *));
    	
    	for (i=0; i<5; i++)
    		array->adj[i]->key = i;
    		
    	return 0;
    }
    La compilazione non mi da problemi.
    Però, in esecuzione, quando arriva ad eseguire l'istruzione array->adj[i]->key = i; mi da errore di "Segmentation fault".
    Qualcuno mi sa aiutare?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [C] Problema di memoria con strutture dinamiche

    Manca l'allocazione dello spazio per le strutture edge ...

    codice:
    int main(int argc, char *argv[])
    {
    	typedef struct edge
    	{
    		int key;
    	} edge;
    	
    	typedef struct graph
    	{
    		edge **adj;
    	} graph;
    	
    	graph *array;
    	int i;
    	
    	array = (graph *)malloc(sizeof(graph));
    	array->adj = (edge **)malloc(5*sizeof(edge *));
    
    	for (i=0; i<5; i++)
    		array->adj[i] = (edge *)malloc(5*sizeof(edge));
    	
    	for (i=0; i<5; i++)
    		array->adj[i]->key = i;
    		
    	return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie, ora funziona

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da pigrotto
    ora funziona
    Questo lo sapevo ... spero tu abbia capito anche il perchè ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    spero tu abbia capito anche il perchè ...
    Sì, ora ho capito, grazie
    Usavo un doppio puntatore ed avevo allocato la memoria solo per i puntatori e non per la struttura puntata.

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.