PDA

Visualizza la versione completa : [C] Errore imprevisto in programma con puntatori e allocazione di memoria


d1gu4k3r
30-01-2012, 12:22
Non capisco non mi da errori di sintassi o cose del genere, ma appena faccio partire l'eseguibile mi dice che ha smesso di funzionare e si spegne...questo è il codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned int boolean;
#define false 0
#define true 1
struct list {
int code;
struct list *next_ptr;
};
struct project {
char name[81];
struct list *ptr;
};

void print_project(struct project *V, int N, int code) {
int count;
boolean found;
found = false;
while (found == false) {
for (count = 0; count < N; count++) {
if (V[count].ptr->code == code)
found = true;
}
}
if (found == true)
printf("Il progetto si chiama %s", V[count].name);
else
printf("Lo studente con matricola %d non partecipa ad alcun progetto",
code);
}
int main() {
struct project V[10];

strcpy(V[0].name, "Leonardo");
V[0].ptr->code = 5269075;
strcpy(V[1].name, "Galileo");
V[1].ptr->code = 5254739;
strcpy(V[2].name, "Giotto");
V[2].ptr->code = 5125496;
print_project(V,3,5254739);

system("pause");
return 1;
}
scusate il disturbo...ma non riesco a capire!

oregon
30-01-2012, 12:25
Cosa fa questo

V[0].ptr->code = 5269075;

?

Ti faccio notare che il puntatore ptr non è valido ...

d1gu4k3r
30-01-2012, 12:28
in teoria dovrebbe assegnare a code il valore 52...
perchè ptr non è valido?

oregon
30-01-2012, 12:31
Originariamente inviato da d1gu4k3r
perchè ptr non è valido?

Dove hai allocato lo spazio e assegnato ptr ?

d1gu4k3r
30-01-2012, 12:34
Giusto,scusa sono alle prime armi..
per allocare dovrei fare una cosa tipo questa:
A=(struct project*)malloc(3*sizeof(struct project)); ?
ma cosa intendi con assegnare ptr?
scusa la mia ignoranza...

d1gu4k3r
30-01-2012, 12:35
volevo dire...
V=(struct project*)malloc(3*sizeof(struct project));

oregon
30-01-2012, 12:37
Devi allocare lo spazio per ogni puntatore ...



strcpy(V[0].name, "Leonardo");
V[0].ptr = (struct list *)malloc(sizeof(struct list));
V[0].ptr->code = 5269075;

d1gu4k3r
30-01-2012, 12:42
Ok grazie mille ora non si blocca però invece di dirmi
"Il progetto si chiama Leonardo"
mi dice
"Il progetto si chiama <N(e altri simboli strani)"...

oregon
30-01-2012, 12:45
Hai scritto quella riga per ogni puntatore che hai usato ... vero ?

Mostra il codice modificato ...

d1gu4k3r
30-01-2012, 12:47
si ecco..

int main() {
struct project V[10];

strcpy(V[0].name, "Leonardo");
V[0].ptr = (struct list *) malloc(sizeof(struct list));
V[0].ptr->code = 5269075;
strcpy(V[1].name, "Galileo");
V[1].ptr = (struct list *) malloc(sizeof(struct list));
V[1].ptr->code = 5254739;
strcpy(V[2].name, "Giotto");
V[2].ptr = (struct list *) malloc(sizeof(struct list));
V[2].ptr->code = 5125496;
print_project(V, 3, 5269075);

system("pause");
return 1;
}

Loading