我对此代码存在严重问题:
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”行时,它似乎工作没有崩溃,但好吧,它没有读取任何东西。 .. 我怎样才能解决这个问题?什么可能导致崩溃的想法?
答案 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
的结果。