c - 从文件读取到 C 中的 float** 内存块

标签 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”行时它似乎没有崩溃,但好吧,它没有读取任何东西。 .. 我怎样才能解决这个问题?任何可能导致崩溃的想法?

最佳答案

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/

相关文章:

C 列表插入程序 - 运行时出现段错误

c - 读取字符串时内存错误

java - 无法编辑/更新 xml 文件

java - 从文本文件中读取哈希表

有人可以解释 Quake 3's ' hunk' 吗?

c - "warning: assuming that the loop is not infinite"的解释是什么

c - 如何将 GtkWindow 的背景设置为图像?

java - 为文件进度的每个表格单元格添加进度条 - Java

python - 如何使用更少的内存完成文本分类任务

c++ - 堆栈分配的数组是否可能发生内存泄漏?