PDA

View Full Version : [C++] errore eccezione di 2 puntatori?


okay
07-04-2004, 14:45
ho questa struttura:

struct concorso {
int serie;
char organizzatore;
int partecipanti;
};

...... e credo che nel codice si sovrapponga qualcosa e crascha il prg.

da int main richiamo questa routine sotto:

void PuntatoriStrutture(){

system("cls");
//classe Cpuntatori
cout << endl;
//cout << "Numero di byte occupati\n";
cout << "Puntatori a strutture"<< endl;
cout << "-------------------------"<< endl;


///////////////////////////

//struttura
struct concorso c[2], *cPtr=NULL;

c[0].serie = 2;
c[0].organizzatore = 'F';
c[0].partecipanti = 482;
c[1].serie = 0;
c[1].organizzatore = 'G';
c[1].partecipanti = 33;
c[2].serie = 3;
c[2].organizzatore = 'E';
c[2].partecipanti = 107;

for(cPtr = c; cPtr < c+3; ++cPtr)

printf("%d %c %d\n", cPtr->serie, cPtr->organizzatore, cPtr->partecipanti);
getch();



//////////////////////////////






//int *n;//=num;
int num[] = {15,14,18,20,30}, *n=NULL;
//int *n=num;

cout << "int num[] = {15,14,18,20,30}; int *n;" << endl; //


cout << "I numeri sono:\n";
for (int i = 0; i < 5; i++){
n=&num[i];
// *n=-10;
cout << '\t' << i << ". [" << num[i] << "] [stampa contenuto] *n " << *n << " [stampa locazione] n " << n<< endl; //*n stampa contenuto

}
cout << endl;


cout << "-------------------------"<< endl;
cout << "premi una tasto" << endl;
gotoxy(16, 19);
getch();

DisplayMenu();

}
..................................


se tolgo questo pezzo di codice:

///////////////////////////

//struttura
struct concorso c[2], *cPtr=NULL;

c[0].serie = 2;
c[0].organizzatore = 'F';
c[0].partecipanti = 482;
c[1].serie = 0;
c[1].organizzatore = 'G';
c[1].partecipanti = 33;
c[2].serie = 3;
c[2].organizzatore = 'E';
c[2].partecipanti = 107;

for(cPtr = c; cPtr < c+3; ++cPtr)

printf("%d %c %d\n", cPtr->serie, cPtr->organizzatore, cPtr->partecipanti);
getch();

//////////////////////////////

.....tutto funziona
....ma qual'è il problema

forse si sovrappongono zone di memoria di *n e *cPtr ???????????

se invece metto int num[] = {15,14,18,20,30}, *n=NULL;
all'inizio della routine, i primi 2 numeri che stampa sono rispettivamente: 69 e 107 invce di 15 e 14........ e gurda caso 107 è il numero della struttura concorso........... come mai?????? e funziona.

/\/\@®¢Ø
07-04-2004, 15:35
Dichiari c come array di due elementi ma cerchi di usarne tre (c[2] va a scegliere il terzo elemento !)