2013-04-06 155 views
0

你好,我有一個從文件中填充我的數組的問題。我第一次運行我的nacitaj功能,效果很好。但是在我再次調用它之後,輸出值很瘋狂。在nacitaj函數被多次調用後,有什麼辦法可以告訴程序覆蓋suma []中的值嗎?從文件填充動態數組

int nacitaj(float *suma, int *k) { 
FILE *fr; 
int i=0; 
int j=1; 
int o=1; 
char p[30]; 
j=*k; 


if ((fr = fopen("FILE.TXT","r")) == NULL){ 
    printf("NULL\n"); 
} 
else { 
    while(feof(fr) == 0){ 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     i++; 
    } 

    suma=((float*)malloc(i*sizeof (float))); 
    rewind(fr); 

    while(feof(fr) == 0){ 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     fscanf(fr,"%f\n", &suma[j]); 
     fgets(p,30,fr); 
     fgets(p,30,fr); 
     j++; 

    } 

} 
*k=j; 
fclose(fr); 
return suma; 
} 

主要

if(c=='N'){ 
      suma=nacitaj(suma,&k); 
     } 

我試圖做

suma=((float*)malloc(0*sizeof (float))); 

在beggining但它使事情變得更糟。

+1

你是否在再次調用函數之前將'k'設置爲正確的值? – cnicutar 2013-04-06 13:12:18

+0

我是否在分配前分配0byte的內存? 我爲int k appologize ...它與程序的這部分無關 – Toesmash 2013-04-06 13:14:04

+0

@Toesmash是的它確實:'j = * k;'。 – cnicutar 2013-04-06 13:14:53

回答

0

我不得不在第二次調用 函數時重新分配我的數組。

當您再次調用函數時,您已經重新分配了數組,並且使用了非常相同的語句(此外,還有許多圓括號和類型轉換)。

suma=((float*)malloc(i*sizeof (float))); 

您可能正在尋找的是如何在不再需要數組時解除分配數組。

free(suma);