C - 函数内部的数组初始化

时间:2018-02-23 10:50:44

标签: c pointers

在main函数中,我有一些像

这样的空指针
double *data_1;

此指针作为参数传递给其他函数,它确定有多少组件必须具有data_1并使用 malloc 分配内存块并存储信息:

void function(double *data) {
   ...

   data = (double *) malloc((size_t) (Ndata) * sizeof(double));

   for(i = 0; i < (Ndata); i++) {
     data[i] = sys->points[i][coordinate];
  }
}

此代码无效。我使用 GDB 来检查bug,我在 function()里遇到了分配工作,但是当执行返回到 main()函数时,数组 data_1未被修改虽然它指向的内存与 function()中的“data”参数完全相同

为什么会这样?

1 个答案:

答案 0 :(得分:2)

传递给函数的指针按值传递。它将复制到参数data。在内部,您将内存分配给data,这将使其指向已分配的内存而不是您传递的指针。对此指针所做的任何修改都不会反映到您传递的指针中。您需要将指针返回到已分配的内存。

double *function() {
   ...

   double *data = malloc((size_t) (Ndata) * sizeof(double));

   for(i = 0; i < (Ndata); i++) {
     data[i] = sys->points[i][coordinate];
   }
   return data;  
}