这段代码有一个严重的问题:
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”行时它似乎没有崩溃,但好吧,它没有读取任何东西。 .. 我怎样才能解决这个问题?任何可能导致崩溃的想法?
最佳答案
tab[x]=(float*)malloc(sizeof(float)*i);
由于您在上面分配内存的方式,您似乎在下面的行中有数组访问越界。您最多只能访问(第二个维度的)索引 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
)。
此外,您不需要转换 malloc
的结果.
关于c - 从文件读取到 C 中的 float** 内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767532/