4

我想要一个读取文件并返回动态整数数组的 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

还是有更好更清洁的方法来实现这一目标?

4

1 回答 1

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供他人使用的功能。

于 2013-10-24T17:38:22.187 回答