它是段错误,因为 m insidecreate_and_modify_array
是一个局部变量,所以 m insidemain
仍然是未初始化的。
更明确地说,代码流是:
开头main
m
是一个随机的、未分配的内存地址。然后它create_and_modify_array
用那个内存地址调用。在内部创建create_and_modify_array
了一个名为的新变量m
,它具有传入的随机、未分配的内存地址。然后您调用array
并将其中的变量分配给您分配的内存。m
create_and_modify_array
问题是该值m
never 被传递回m
in main
。
为此,您需要将指向 main 的指针传递m
到create_and_modify_array
:
void create_and_modify_array (double **m) {
double *tmp = array(10);
tmp[0] = 123;
*m = tmp; // This passes the value of tmp back to the main function.
// As m in this function is actually the address of m in main
// this line means put tmp into the thing that is at this address
}
void main () {
double *m;
create_and_modify_array (&m); // This passes the address of the variable m
// into create_and_modify_array
printf ("%f\n", m[0]);
}