我想要一个读取文件并返回一个动态整数数组的 C 函数。初始化此数组的指针的最佳方法是什么?
我当前的版本:
void readFile(int* array,int* size){
// ...read the file and see there are X integers...
array = malloc(X * sizeof(int));
*size = X;
// ... fill the array ...
}
int main() {
int* array;
int size;
readFile(array,&size);
//Work with array
return 0;
}
这给了我初始化警告,可以这样做吗
int* array = NULL
或者是否有更好、更简洁的方法来实现这一目标?
最佳答案
技术评论
首先,您遇到问题是因为 readFile
使用 int *
,而不是 int **
。如果你有
void readFile(int **array, int *size) {
*array = malloc(X * sizeof(int));
...
你实际上可以调用它
int main() {
int *array, size;
readFile(& array, & size);
...
因此调用者的array
将指向分配给readFile
的内容。
设计问题
对于您的具体问题,从技术上讲两者都是可能的,只要清楚地了解初始化/分配和清理的责任即可:
main
分配数组,readFile
填充它。readFile
分配数组并用文件内容填充数组。
main
可以分配内存,因为它是知道何时清理(释放内存)的函数。否则,实现readFile
的单元也可以实现一个freeFile
函数供其他人使用。
关于c - 在 C 中初始化指针最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572496/