从文件读取到浮点数** C中的内存块

时间:2016-06-11 19:03:49

标签: c file memory

我对此代码存在严重问题:

double wczytanie(){
FILE *plik;
char znak;
int i=0; 
int x=0;
float **tab;
char nazwapliku[100];
printf("Podaj nazwe pliku: ");
scanf("%s", nazwapliku);
plik = fopen(nazwapliku,"r");   
while(!feof(plik)){
znak=fgetc(plik);
    if(znak=='\n') {
    i++;
    }
}


tab=(float**)malloc(sizeof(float*)*3);
    for(x=0;x<3;x++){
        tab[x]=(float*)malloc(sizeof(float)*i);
    }   

   rewind(plik);     

for(x=0;x<=i;x++){
fscanf(plik,"%f %f %f", &tab[0][i], &tab[1][i], &tab[2][i]);
    printf("%f %f %f\n", tab[0][i], tab[1][i], tab[2][i]);
    }
fclose(plik);

文件读取正确,值打印,但之后崩溃,返回代码255或3221226356.当我删除“fscanf”行时,它似乎工作没有崩溃,但好吧,它没有读取任何东西。 .. 我怎样才能解决这个问题?什么可能导致崩溃的想法?

1 个答案:

答案 0 :(得分:2)

tab[x]=(float*)malloc(sizeof(float)*i);

由于您在上面分配内存的方式,您似乎在下面的行中有超出范围的数组访问。您只能访问(第二维)的索引({1}},例如i,不包括它。

下面:

0....i-1

可能你的意思是fscanf(plik,"%f %f %f", &tab[0][i], &tab[1][i], &tab[2][i]); // can't access i-th element 而不是上面的x,但是你需要让i内的条件更紧密(例如for)。

此外,您无需投射x<i的结果。