为什么calloc函数不分配数组?[已关闭]

hec6srdp  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(120)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
我试图读取一个文件,并将文件中的所有字符填充到一个数组中。问题是在while循环中执行停止,并且出现分段错误。这是感兴趣的函数:

void allocAndFillArray(char **arrayChar, FILE *file) {
    // *file is checked before the function and 
    //  if the function is called the pointer is not NULL

    int len = x; // x is just a random size. In the real function it is the number of characters in the file
    *arrayChar = (char *)calloc(len, sizeof(char));

    int i = 0;
    while (i < len) {
        *arrayChar[i] = fgetc(file);
        i = i + 1;
    } // in this cycle the execution stops after the first iteration 
      // and only one character is written in the array 
      // before a crash reported as segmentation fault. 

   fclose(file);
}

我试着用malloc改变calloc,试着改变大小,但它就是不起作用

cetgtptt

cetgtptt1#

为什么calloc函数不分配数组?
你没有检查calloc()是否成功,你应该检查。但更有可能的是,标题问题的答案是calloc()实际上 * 正在 * 分配数组。
问题是,在while周期中,执行停止,并且存在分段故障错误。
那几乎可以肯定是因为你的功能有缺陷。

*arrayChar[i] = fgetc(file);

你似乎想要这个,而不是:

(*arrayChar)[i] = fgetc(file);

[]运算符和所有其他后缀运算符在所有运算符中具有最高的优先级,因此原始语句等效于

*(arrayChar[i]) = fgetc(file);

,如果i达到一个非常小的数字以上,几乎肯定会超出*arraychar指定的对象的边界--很可能达到甚至2,尽管这可能不足以触发segfault。

相关问题