在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”参数完全相同
为什么会这样?
答案 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;
}