|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2019
Messaggi: 5
|
[C]Passare una struct per riferimento
Ciao a tutti premetto che sia una domanda molto banale ma sto impazzendo non riesco a passare una struct per riferimento perche una volta uscito dalla funzione di riempimento e passata la struct alla funzione di stampa la struct risulta essere vuota,dov'e che sbaglio?
Questa è la struct: Codice:
typedef enum {NESSUN_PERICOLO=1,TRAPPOLA,ALIENO} tipo_pericolo;
typedef enum { MEDIKIT=1,POZIONE,MATERIALE,COLPI_LANCIARAZZI} tipo_ogetto;
struct Cella{
tipo_pericolo pericolo;
tipo_ogetto oggetto;
};
Codice:
static struct Cella *map=NULL; void crea_scacchiera(struct Cella *mapp,int righe,int colonne); E questa è la sua chiamata Codice:
do{
rewind(stdout);
rewind(stdin);
printf("1-CREA SCACCHIERA\n");
printf("2-STAMPA SCACCHIERA\n");
printf("3-TERMINA CREAZIONE\n");
printf("?");
rewind(stdout);
rewind(stdin);
scanf("%d",&f);
switch (f) {
case 1: crea_scacchiera(&map,rig,col);
break;
case 2:stampa_scacchiera(map,rig,col);
break;
case 3: termina_creazione();
break;
default:puts("COMANDO INVALIDO SCEGLIERE DA 1 A 3\n");
break;
}
}while(f!=3);
nella chiamata se uso la "&" mi da errore in fase di compilazione se non la uso la struct una volta uscito dalla funzione risulta essere vuota |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Feb 2011
Messaggi: 46
|
giusto che ti dia errore se usi &map, perché per come l'hai dichiarato
map è già un puntatore a struct Cella, che coincide col prototipo della funzione crea_scacchiera. Per il secondo problema, stai allocando da qualche parte lo spazio per la struct? Non si evince dai frammenti di codice che hai postato. |
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Jan 2019
Messaggi: 5
|
Quote:
Codice:
printf("Inserire dimensione scacchiera:");
rewind(stdout);
scanf("%d",&righe);
colonne=righe;
mapp=malloc(righe*colonne*sizeof(struct Cella));
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Feb 2011
Messaggi: 46
|
e la malloc la fai dentro la funzione crea_scacchiera?
In caso affermativo dato il prototipo della suddetta funzione, non hai modo di modificare da dentro crea_scacchiera il puntatore mapp, che viene passato per valore. Se vuoi modificare il puntatore devi passargli un puntatore a puntatore. In alternativa invece che passarlo come argomento, puoi metterlo nel valore di ritorno della funzione. EDIT noto però che rig e col le passi da fuori, quindi forse l'allocazione non la fai dentro crea_scacchiera, in tal caso posta tutto il codice della funzione, altrimenti è difficile capire Ultima modifica di melko : 29-01-2019 alle 15:28. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2019
Messaggi: 5
|
si rig e col le ho dichiarate come variabili globali in modo che possa stampare la scacchiera ovunque senza che gli passi ogni volta le grandezze e si la malloc la facevo dentro la funzione per una questione di comodità però a sto punto uso la malloc prima della funziona e poi gli passo mapp e lo riempo
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Feb 2011
Messaggi: 46
|
In generale però fare uso di variabili globali, se non realmente necessario, è considerata
una cattiva pratica (e per buoni motivi) e generalmente è sconsigliato farlo. |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jan 2019
Messaggi: 5
|
sisi lo so è un progetto per l'università è stato specificato dal professore che non è considerata una cosa buona fare c'e lo fa fare solo per facilitarci un minimo il lavoro
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jan 2019
Messaggi: 5
|
Ho un altra domanda ora il programma lo ho diviso in 3 parti main.c gamelib.c e gamelib.h dove in gamelib.h ho tutte le dichiariazioni e in gamelib.c lo svolgimento delle funzioni, ora c'e una funzione che dal centro di una funzione in gamelib.c blocchi tutto e mi riporti al main?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
No, non esiste una cosa del genere. E sarebbe pure sbagliato.
Almeno, per quello che ho capito dalla tua richiesta ... Esattamente cosa vorresti fare e a cosa ti servirebbe? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:05.




















