Salve , perchè dopo aver inserito gli elementi nel vettore attraverso la scanf ottengo l'errore "Error in `./a.out': realloc(): invalid pointer: 0x00007fffa7795e78 " ? grazie.
questo è il codice:
#include <stdlib.h>
#include <stdio.h>
#define DIM 50
#define FINE 0
void AllocazioneVettore(float *vett);
void ReallocVettore(float *vett,int *ptr);
void LeggereSequenzaReali(float *vett,int *ptr);
int CalcolaMinimo(float *vett);
int CalcolaMassimo(float *vett);
int CalcolaMedia(float massimo,float minimo);
void IndividuareSequenzaConsecutivi(float *vett,float Sottoseq[DIM]);
int SommaElementiSottosequenza(float SottoSeq[DIM]);
void VerificaSeSommaEMinoreDiMedia(float media,float somma,float SottoSeq[DIM]);
int main(){
float Massimo,Minimo,media,somma,SottoSeq[DIM];
float vett;
int ptr;
AllocazioneVettore(&vett);
LeggereSequenzaReali(&vett,&ptr);
ReallocVettore(&vett,&ptr);
Minimo = CalcolaMinimo(&vett);
Massimo = CalcolaMassimo(&vett);
media = CalcolaMedia(Minimo,Massimo);
IndividuareSequenzaConsecutivi(&vett,SottoSeq);
somma = SommaElementiSottosequenza(SottoSeq);
VerificaSeSommaEMinoreDiMedia(media,somma,SottoSeq);
system("pause");
return 0;
}
void AllocazioneVettore(float *vett){
vett = (float *) malloc (DIM * sizeof(float));
}
void LeggereSequenzaReali(float *vett,int *ptr){
int i = 0;
int trovato = 0;
printf("inserisci sequenza:\n");
while(i < DIM && trovato == 0){
scanf("%f",(vett + i));
if (*(vett + i) == FINE){
trovato = 1;
}
i = i + 1;
}
i = i - 1;
*(vett + i) = FINE;
*ptr = i ;
}
void ReallocVettore(float *vett,int *ptr){
vett = (float *) realloc (vett, *ptr * sizeof(float));
}
int CalcolaMinimo(float *vett){
int i = 0;
int j = 0;
float MIN;
while (vett[i] != FINE && vett[j] != FINE){
if (vett[i] <= vett[j]){
MIN = vett[i];
j = j + 1;
}else if (vett[i] > vett[j]){
i = i + 1;
}
}
printf("Min: %f\n",MIN);
return MIN;
}
int CalcolaMassimo(float *vett){
int i = 0;
int j = 0;
float MAX;
while (vett[i] != FINE && vett[j] != FINE){
if (vett[i] >= vett[j]){
MAX = vett[i];
j = j + 1;
}else if (vett[i] < vett[j]){
i = i + 1;
}
}
printf("Max: %f\n",MAX);
return MAX;
}
int CalcolaMedia(float massimo,float minimo){
float media = (massimo + minimo)/2;
printf("Media: %f\n",media);
return media;
}
void IndividuareSequenzaConsecutivi(float *vett,float Sottoseq[DIM]){
int i = 0;
while (vett[i] != FINE){
if (vett[i] < vett[i+1]){
Sottoseq[i] = vett[i];
}
i = i + 1;
}
Sottoseq[i] = vett[i];
Sottoseq[i+1] = FINE;
}
int SommaElementiSottosequenza(float SottoSeq[DIM]){
int i = 0;
float somma = 0;
while (SottoSeq[i] != FINE){
somma = somma + SottoSeq[i];
i = i + 1;
}
return somma;
}
void VerificaSeSommaEMinoreDiMedia(float media,float somma,float SottoSeq[DIM]){
int i = 0;
if (somma < media){
while (SottoSeq[i] != FINE){
printf("%f",SottoSeq[i]);
i = i + 1;
}
}
}