在函数调用中创建数组时是否需要malloc?

时间:2018-01-08 14:39:31

标签: c

我有一个函数调用

void copy_data(FILE *fin, FILE *fout, int size) {
     char buf[size];
     memset(buf, 0, size);
     fread(buf, sizeof buf, 1, fin);
     fwrite(buf, sizeof buf, 1, fout);

}

malloc在这里是否必要,因为我读到我需要使用malloc时,我不知道编译时的大小,我不知道这里,但我觉得malloc在这里不是必需的。

2 个答案:

答案 0 :(得分:4)

C99及更高版本允许可变长度数组(VLA)。 buf是一个可变长度数组,如果size很小,您可以使用它。对于大型(堆栈大小限制)阵列,您需要动态分配内存。

请注意,自C11起,VLA成为可选项。

答案 1 :(得分:3)

如果你不打算使用大量内存,那么这不是必需的。与此函数相关的数据将与其他变量一起分配到堆栈中(您将size类型的char元素放在堆栈上。不过,您可以考虑take these points。如果你想使用更大的堆,你需要使用malloc(),然后手动释放内存。

修改 正如已经指出的那样,C11标准使可变长度数组可选,因此代码的可移植性问题也随之而来。