我想要一个C函数来读取文件并返回一个动态的int数组。初始化此数组指针的最佳方法是什么?
我当前的版本:
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
还是有更好更清洁的方法来实现这个目标吗?
答案 0 :(得分:5)
技术评论
首先,您遇到问题,因为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
函数供其他人使用。