2013-04-06 5 views
0

Здравствуйте, у меня возникла проблема с заполнением моего массива из файла. В первый раз, когда я запускаю свою функцию nacitaj, она отлично работает. Но после того, как я назову это еще раз, выходные значения сумасшедшие. Есть ли способ сказать программе перезаписать значения в suma [] после того, как функция nacitaj вызывается более одного раза?Заполнение динамического массива из файла

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

+0

Я распределяю 0 байт памяти, когда у меня есть i ++ перед распределением? i appologize для int k ... это не имеет ничего общего с этой частью программы – Toesmash

+0

@Toesmash Да, это делает: 'j = * k;'. – cnicutar

ответ

0

Мне еще нужно выяснить, как перераспределить мой массив при вызове моей функции во второй раз.

Вы уже перераспределяете массив при вызове функции снова, с тем же самым утверждением (которое, кроме того, имеет не так много круглых скобок и типов приведения).

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

Что вы, возможно, ищете, так это то, как де-распределить массив, когда он больше не нужен.

free(suma); 
Смежные вопросы