PDA

Visualizza la versione completa : Errore gestione della memoria in c


fenigo69
07-12-2016, 04:44
salve a tutti, sto provando a realizzare un programma che dato in input un array fino al carattere terminatore "-1" mi stampi una matrice di dimensioni NxN(dove N la dimensione dell'array) e dove ogni elemento b[i][j]=a[i]*a[j]; l'ho realizzato, tutto ok, solo che con un input troppo "lungo" la piattaforma mi da errore di violazione del limite di memoria, potreste dare un occhiata al codice perfavore? Io sono due giorni che ci sbatto la testa ma non trovo soluzione.


#include <stdio.h>
#include <stdlib.h>
int** prodottoscalare(int *a,int dim);


int main()
{
int i=0;
int c;
int j;
int *a;
a=malloc(sizeof(int));
while(c!=-1){
scanf("%d",&c);


if(c!=-1){
a[i]=c;
i++;
a=realloc(a,(i+1)*sizeof(int));




}


}


int** b;
b=prodottoscalare(a,i);
for(j=0;j<i;j++){
if(j!=0){
printf("\n");}
for(c=0;c<i;c++){printf("%d ",b[j][c]);}
}
return 0;
}




int **prodottoscalare(int *a,int dim){
int i;
int j;
int **b;
b=malloc(dim*sizeof(int));
for(i=0;i<dim;i++){b[i]=malloc(dim*sizeof(int));}
for(i=0;i<dim;i++){
for(j=0;j<dim;j++){
b[i][j]=a[i]*a[j];
}
}
return b;
}

oregon
07-12-2016, 10:16
A parte questa

b=malloc(dim*sizeof(int));

che sbagliata e dovrebbe essere

b=malloc(dim*sizeof(int *));

non vedo altro di evidente.

Dicci cosa inserisci come dati che ti danno problemi e il messaggio esatto dell'errore.

fenigo69
07-12-2016, 10:22
GRAZIE GRAZIE GRAZIE l'errore era proprio quello, ci sbattevo la testa da due giorni ma non l'avevo proprio notato....grazie ancora

Loading