PDA

View Full Version : [C] Errore a run-time con i puntatori.


supalova10
27-01-2010, 13:30
Salve ho un problema con i puntatori e volevo sapere se è un problema noto di windows o c'è qualche errore di compilazione.

Allora se scrivo un programmino nel seguente modo da problemi, cioe spunta la solita segnalazione errore di windows etc etc:

int *pi;
int a=9;
*pi=a;
printf("%d\n", *pi);

invece nel seguente modo (meno intuitivo pero) non ho problemi:

int *pi;
int a=9;
pi=&a;
printf("%d\n", *pi);


Grazie per le risposte.

Rsk
27-01-2010, 13:37
veramente funziona in entrambi i casi.

Nel primo caso copi il contenuto della variabile a nella cella puntata da pi

Nel secondo caso realizzi un puntamento da parte del puntatore pi verso l'indirizzo di memoria della variabile a

supalova10
27-01-2010, 15:37
veramente funziona in entrambi i casi.

Nel primo caso copi il contenuto della variabile a nella cella puntata da pi

Nel secondo caso realizzi un puntamento da parte del puntatore pi verso l'indirizzo di memoria della variabile a

si ma nel caso in cui non uso l'& quando faccio run mi da errore di windows... l'applicazione sara chiusa etc etc.... non so a cosa è dovuto.

cdere
27-01-2010, 15:53
veramente funziona in entrambi i casi.

Nel primo caso copi il contenuto della variabile a nella cella puntata da pi

Nel secondo caso realizzi un puntamento da parte del puntatore pi verso l'indirizzo di memoria della variabile a

Errato.
nel primo caso copi il contenuto di a (a essendo una variabile 'scalare', non un array insomma, copi il contenuto senza l'& davanti, nel caso fosse stato un array sarebbe stato ininfluente) nella variabile puntata da pi, quindi *pi, ma nel secondo caso qual'è *pi? Dove imposti l'indirizzo che deve puntare pi? Da nessuna parte, o meglio in una locazione random che ha il puntatore a default, che, essendo casuale può funzionare (come a te Rsk) o meno, ma è puro c**o!

supalova: l'unico modo, è appunto il secondo tuttavia anche questo modo sarebbe corretto:


int *pi;
int b, a=9;

pi=&b;
*pi=a;
printf("%d\n", *pi);

supalova10
27-01-2010, 16:08
Errato.
nel primo caso copi il contenuto di a (a essendo una variabile 'scalare', non un array insomma, copi il contenuto senza l'& davanti, nel caso fosse stato un array sarebbe stato ininfluente) nella variabile puntata da pi, quindi *pi, ma nel secondo caso qual'è *pi? Dove imposti l'indirizzo che deve puntare pi? Da nessuna parte, o meglio in una locazione random che ha il puntatore a default, che, essendo casuale può funzionare (come a te Rsk) o meno, ma è puro c**o!

supalova: l'unico modo, è appunto il secondo tuttavia anche questo modo sarebbe corretto:


int *pi;
int b, a=9;

pi=&b;
*pi=a;
printf("%d\n", *pi);


ho capito, grazie mille... quindi in pratica a run time il programma crasha perche manca l'inizializzazione del puntatore pi, esatto?

cdere
27-01-2010, 16:13
si si