Ciao, perchè quando provo ad eseguire questo codice il programma crasha?????
codice:
#include <stdio.h>
#include <stdlib.h>
void funzione(int *vettore);
int main()
{
int *v;
funzione(v);
printf("%d", v[0]);
return 0;
}
void funzione(int *vettore)
{
int i,n;
vettore = (int*) malloc(5*sizeof(int));
for(i=0; i<5; i++)
{
vettore[i]=i;
n = vettore[i];
}
return;
}
Se dichiaro il vettore come
direttamente nel main e poi lo passo alla funzione tutto fila liscio come l'olio, la funzione fa il suo dovere e quando ritorno nel main ho il vettore modificato.... se invece passo alla funzione solo il puntatore e provo ad allocarlo dinamicamente solo all'interno di essa non ottengo un bel niente!!!
Se 0x5c era l'indirizzo contenuto nella variabile puntatore int *v, premendo "step into" all'istruzione
in modalità debug, nella cella della tabella Waches accanto alla variabile int *vettore c'è scritto 0x5c, cioè significa che il parametro è stato passato correttamente, ed ovviamente se scrivo vettore[0] prima che venga eseguita l'istruzione
codice:
vettore = (int*) malloc(5*sizeof(int));
, accanto e in rosso appare il messaggio "cannot access memory at address 0x5c"....
la cosa sconvolgente è che, anche dopo che quest'ultima viene eseguita, la scritta da rossa diventa nera ma rimane ugualmente e cosa ancor più sconcertante è che mentre eseguo il ciclo vedo che la variabile n assume esattamente i valori che dovrebbe contenere vettore[i] (per i=0: n=0, i=1: n=1...), ma se provo a scrivere vettore[0], vettore[1], vettore[2] nella Watches non posso vedere una beneamata m... !!!! Ed ovviamente quando ritorno al main se provo ad accedere ad una cella del vettore v ottengo sempre la stessa cosa "cannot access memory at address 0x5c"....
Questo è il codice