ragazzi ho un problema con questa funzione...mi da un errore di segmentazione nel main perkè evidentemente non funziona bene il realloc. Inoltre non passa all'esterno l'indirizzo effettivo di B in quanto ha un valore diverso dall'interno all'esterno.
codice:void no_border (int m, int n, int **A, int **B, int *k) { int i,j; // Allocazione dinamica di COORDINATE (creazione di un vettore bidimensionale di dim iniziale 1x2) //Alloca le righe B=(int **)malloc(1*sizeof(int *)); //Verifica allocazione righe if (B == NULL) { printf("MATRICE B - Allocazione righe fallita: memoria insufficiente"); exit(1); } //Alloca le colonne for (i=0; i<1; i++){ *(B+i)=(int *)malloc(2*sizeof(int)); //Verifica allocazione colonne if (*(B+i) == NULL) { printf("MATRICE B - Allocazione colonne fallita: memoria insufficiente"); exit(1); } } //analizza gli elementi della matrice non di bordo for (i=1; i<m-1; i++){ for (j=1; j<n-1; j++){ if (*(*(A+i)+j) > *(*(A+i-1)+j)){ if (*(*(A+i)+j) > *(*(A+i)+j+1)){ if (*(*(A+i)+j) > *(*(A+i+1)+j)){ if (*(*(A+i)+j) > *(*(A+i)+j-1)){ //assegnazione degli indici dell'elemento *(*(B+(*k))+0)=i; *(*(B+(*k))+1)=j; //incrementa l'indice-dimensione dell'array B *k=*k+1; //rialloca l'array B espandendolo a k righe B=(int **)realloc(B,*k*sizeof(int*)); //alloca i vettori colonna *(B+(*k))=(int *)malloc(2*sizeof(int)); /************************************ //inizializzazione k-esima riga creata per il realloc succ *(B+(*k)) = NULL; //allocazione delle ripettive colonne (REALLOC=MALLOC) *(B+(*k))=(int *)realloc(*(B+(*k)),2*sizeof(int)); *************************************/ } } } } } } printf("indirizzo di memoria interno di COORDINATE=%d",B); }


Rispondi quotando