View Single Post
Old 14-12-2007, 15:33   #1
salvodel
Senior Member
 
L'Avatar di salvodel
 
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;
}
Quando lo lancio ottengo il seguente errore relativo alle righe dove utilizzo la funzione malloc
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
Se invece faccio
Codice:
VEDERE=(double *)malloc(10*sizeof(double));
come ho visto fare per un esempio "anacolo" mi da altri tipi di errore.
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...."
salvodel è offline   Rispondi citando il messaggio o parte di esso