|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
[C] Allocazione dinamica della memoria
Siccome devo leggere dei dati da un file ed inserirli in una matrice pensavo di utilizzare l'allocazione della memoria. Vedendo alcuni esempi ho scritto il seguente file(se ci sno altri tipi errori è perche ho fatto un taglio qua e la per mettere solo il succo visto che con le dimensioni fisse il tutto gira)
Codice:
#include <stdio.h>
#include <stdlib.h>
#define stringa "OUTPUT.DAT"
int legge(int lung, double t[],double X[],double Y[],double Z[],double TT[],double W[],double B[])
{
FILE *fp;
int i=0;
printf("Quanti secondi di acquisizione");
if((fp=fopen(stringa,"r"))==NULL)
printf("Impossibile aprire il file");
else
{
printf("Dati letti:\n");
while(fscanf(fp,"%LE %LE %LE %LE %LE %LE %LE",&t[i],&X[i],&Y[i],&Z[i],&TT[i],&W[i],&B)>0)
{
printf(".");
i++;
if(i>lung)
{
printf("\n");
break;
}
}
}
fclose(fp);
return i;
}
int main(void)
{
double *time;
double *MAT1, *MAT2, *MAT3;
double *MAT4, *MAT5, *MAT6;
int j,t;
int tacq;
printf("Quanti secondi di acquisizione: ");
scanf("%d",&tacq);
t=tacq%fsamp;
time=malloc(t*sizeof(double));
MAT1=malloc(t*sizeof(double));
MAT2=malloc(t*sizeof(double));
MAT3=malloc(t*sizeof(double));
MAT4=malloc(t*sizeof(double));
MAT5=malloc(t*sizeof(double));
MAT6=malloc(t*sizeof(double));
if(time==NULL || MAT1==NULL || MAT2==NULL || MAT3==NULL || MAT4==NULL || MAT5==NULL || MAT6==NULL)
{
printf("Memoria esaurita\n");
exit(1);
}
j=legge(time,MAT1,MAT2,MAT3,MAT4,MAT5);
for(t=0;t<j;t++)
printf("time= %LE\tX= %LE\tW= %LE\n",time[t],MAT1[t],MAT3[t]);
system("PAUSE");
return 0;
}
Codice:
c:\main.cpp(67) : error C2440: '=' : cannot convert from 'void *' to 'double *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Codice:
VEDERE=(double *)malloc(10*sizeof(double)); Grazie a tutti per un aiutino intanto cerco in rete altri esempi. grazie
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
ciao
Credo comunque che la malloc debba essere utilizzata come hai scritto nel secondo esempio: Codice:
char *c; c = malloc(50); int *max; max = (int *)malloc(max*syzeof(int));
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#3 | ||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
Sì, conversioni sempre esplicite; anche se c è un puntatore a char.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Quote:
Cmq andava OVVIAMENTE utilizza in quel modo poiche malloc mi da un void. Ora l'ho scritta cosi: Codice:
time=(double *)calloc(dim,sizeof(double)); Codice:
int legge(double []t,double X[]) e non ad aprire gli occhi. Grazie lo stesso
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Era un errore nell'intestazione della funzione banale.
Grazie mille.
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:23.












e non ad aprire gli occhi.








