c - 在 C 中初始化指针最干净的方法是什么?

标签 c pointers initialization

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

相关文章:

C++:指针、循环变量和结构的问题

c - 通过从子进程到父进程的管道发送多维数组

c - 如何正确调试 Windows 内核驱动程序?

c - 为什么这个 C 代码不起作用?

c - 在先前 malloc ed 指针上使用 realloc 会导致段错误

c++ - 字符串初始化失败

c - 如何将 C 字符串中的计数器变量赋予函数

c - 在 Windows 中从 DLL 使用 FILE* 时出现 fatal error

ios - UITableViewController 被初始化两次

c - 如何检查分配的内存是否已初始化