Passaggio per riferimento/valore

di il
1 risposte

Passaggio per riferimento/valore

Ciao a tutti...ho un problema molto urgente da risolvere. Premetto che sto programmando con le openGl,ma il mio problema riguarda le matrici e il passaggio per riferimento con puntatori ecc...

Dunque io ho una matrice con n righe e m colonne che contiene dei valori dei pixel di una immagine, quindi mi sono costruita una funzione che legge un file .ppm di una immagine e ne estrare il contenuto, memorizzando così il valore delle righe delle colonne e delle coordinate RGB. Fin qui ci sono...nel senso che se poi dal main richiamo la fuzione e empre nel main effettuo la stampa nel valore delle righe e delle colonne è corretto, il mio problema riguarda il valore della matrice, nel senso che se stampo dal main il valore della matrice, praticamente mi da valore zero! Sono sicura che ho sbagliato nel passaggio per riferimento!!! Ora vi scrivo come ho implementato:

main.cpp:


GLuint *image;//in pratica è una matrice nxm di interi di pixel,GLuint definisce solo il tipo dei valori
int n, m;
...
al momento della chiamata alla funzione che legge il file:

readFile(&image,&n,&m);
printf("valori di n e m %d %d",n,m);//qusta stampa è corretta
printf("\n image[19401]= %i",image[19401]); //questa stampa a video produce mage[19401]=0, mentre dovrebbe essere image[19401]=1!!!

la funzione readFile l'ho implementata così:

void readFile(GLuint **image,int *n,int *m){

FILE *fd;

int k;
int a;
int d;

int nm;
char c;
int i;
char b[100];
float s;
int red, green, blue;



printf("enter file name\n");
scanf("%s", b);
fd = fopen(b, "r");
fscanf(fd,"%[^\n] ",b);
if(b[0]!='P'|| b[1] != '3')
{
printf("%s is not a PPM file!\n", b);
exit(0);
}
printf("%s is a PPM file\n",b);
fscanf(fd, "%c",&c);
while(c == '#')
{
fscanf(fd, "%[^\n] ", b);
printf("%s\n",b);
fscanf(fd, "%c",&c);
}
ungetc(c,fd);

fscanf(fd, "%d %d %d", n, m, &k);

printf("%d rows %d columns max value = %d\n",&n,&m,k);
a = *n;
d = *m;
nm = a*d;
printf("Dimensione immagine = %d\n",nm);//stampa corretta
image=malloc(3*sizeof(GLuint)*nm);


s=255./k;


for(i=0;i<nm;i++)
{
fscanf(fd,"%d %d %d",&red, &green, &blue );
image[3*nm-3*i-3]=red;
printf("punto [%i] di coordinate %i \n",3*nm-3*i-3, image[3*nm-3*i-3]);//stampa corretta

}

printf( "image[19401]=%i",image[19401]);//stampa corretta

fclose(fd);
printf("\n read image\n");
}
tutti i valori di questa funzione sono stampati correttamente, ma quando poi vengono stampati nel main invece no!!!
Qualcuno può aiutarmi????

Grazie a tutti!!!

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte