Buon giorno a tutti .. è il mio primo tread ne approfitto per sottoporvi un problemino ..
stò implementando un semplice progammino per elaborare N file (una decina) passati come argomento dai quali leggere tre vettori dal primo per poi aggiungere in coda a questo i valori successivi letti dal secondo argomento ..
l'idea è quella di utilizzare un ciclo ... da 1 a argc e se l'indice è uno usare la malloc altrimenti utilizzare la realloc .. posto l'esempio e spiego il problema ..

codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int column( FILE *f );
int main( int argc , char *argv[]){
	FILE *input ;
	double *time , *temp ;
	int i , k, *law , size = 0 , a , oldSize = 0 , j , ii = 0;
	
	for( k = 1 ; k < argc ; k++){

	   if( (input = fopen( argv[k], "r" ) ) == NULL ){
		   printf("error open file input \n");
	   }
	   else
	   {
		int n = column(input);
		printf("n is %d\n" , n);
	
		size += n;
	if(k==1){
		time = (double*)malloc(n*sizeof(double));
		temp = (double*)malloc(n*sizeof(double)); 
		law  = (int*)malloc(n*sizeof(int));
	}
	else{
		time = (double*)realloc( time , size * sizeof(double));
		temp = (double*)realloc( temp , size * sizeof(double));
		law  = (int*)realloc( law , size * sizeof(int) );
	}
	 
	rewind(input);
	
	/*
	do{
	       a = fgetc(input);
	  }while(a != '\n') ;
	//i=0;
	
	*/
	while(!feof(input)){
		fscanf( input, "%lg %lg %d", &time[ii] ,&temp[ii] , &law[ii] );
		++ii ;
	}
	  
	   }

	printf("oldSize is %d , size is %d\n" , oldSize , size);
	oldSize = size ;
}
	
	for( j=0 ; j < size ; j++ ){
		  printf("law[%d]: %d\n", j ,law[j]);
	   
	   }
return 0 ;
}


int column( FILE *f){
	int c ;
	int n=0;

	while(!feof(f)){
		if( (c = fgetc(f) )== '\n'){
		n++ ;
		}
	}
return n;
}
ora .. il problema è strano .. se io lascio "n" a moltiplicare l'argomento della malloc e passo più di quattro file come argomenti mi dà il seguente messaggio


codice:
oldSize is 0 , size is 746
n is 1142
oldSize is 746 , size is 1888
n is 1340
oldSize is 1888 , size is 3228
n is 746
*** glibc detected *** ./test: realloc(): invalid next size: 0x0000000001e54520 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71ad6)[0x7f9e48d7aad6]
/lib/libc.so.6(+0x776ec)[0x7f9e48d806ec]
/lib/libc.so.6(realloc+0xf0)[0x7f9e48d80a00]
./test[0x40086e]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f9e48d27c4d]
./test[0x4006b9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:02 1711113                            /home/marco/Scrivania/mild/test
00600000-00601000 rw-p 00000000 08:02 1711113                            /home/marco/Scrivania/mild/test
01e49000-01e6a000 rw-p 00000000 00:00 0                                  [heap]
7f9e44000000-7f9e44021000 rw-p 00000000 00:00 0 
7f9e44021000-7f9e48000000 ---p 00000000 00:00 0 
7f9e48af3000-7f9e48b09000 r-xp 00000000 08:01 1438979                    /lib/libgcc_s.so.1
7f9e48b09000-7f9e48d08000 ---p 00016000 08:01 1438979                    /lib/libgcc_s.so.1
7f9e48d08000-7f9e48d09000 rw-p 00015000 08:01 1438979                    /lib/libgcc_s.so.1
7f9e48d09000-7f9e48e61000 r-xp 00000000 08:01 1438987                    /lib/libc-2.11.2.so
7f9e48e61000-7f9e49060000 ---p 00158000 08:01 1438987                    /lib/libc-2.11.2.so
7f9e49060000-7f9e49064000 r--p 00157000 08:01 1438987                    /lib/libc-2.11.2.so
7f9e49064000-7f9e49065000 rw-p 0015b000 08:01 1438987                    /lib/libc-2.11.2.so
7f9e49065000-7f9e4906a000 rw-p 00000000 00:00 0 
7f9e4906a000-7f9e49088000 r-xp 00000000 08:01 1438999                    /lib/ld-2.11.2.so
7f9e49262000-7f9e49265000 rw-p 00000000 00:00 0 
7f9e49280000-7f9e49287000 rw-p 00000000 00:00 0 
7f9e49287000-7f9e49288000 r--p 0001d000 08:01 1438999                    /lib/ld-2.11.2.so
7f9e49288000-7f9e49289000 rw-p 0001e000 08:01 1438999                    /lib/ld-2.11.2.so
7f9e49289000-7f9e4928a000 rw-p 00000000 00:00 0 
7fff8f2d8000-7fff8f2ed000 rw-p 00000000 00:00 0                          [stack]
7fff8f3ff000-7fff8f400000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Abortito
se io invece che n metto un numero molto grande .. nessun problema ..
i file di argomento sono dei file di dati double contenenti non più di 200 colonne ciascuno ..

Spero possiate essermi d'aiuto..
Buona giornata