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.
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.