我刚刚在一个月前开始编程C语言,而且我显然不明白关于内存分配的一些事情,即使我已经从几个不同的来源读到它。初学者级别的内存分配
如果有人能解释为什么这个简单的例子我犯了崩溃,我会非常感激。 (对不起英语不好)
void test(double *x)
{
x = (double *)malloc(2 * sizeof(double));
x[0] = 2;
x[1] = 3;
}
int main()
{
double *x = NULL;
test(x);
printf(" %f", x[0]); //this is where it crashes with no message
}
请删除'C++'标签。 *我们正在与'c' *交战。 < - 笑话。放松。但严重的是,你应该删除'C++'标签。这些日子是两种不同的语言。 – 2016-12-26 20:06:04
一个调试器和两个断点。如果你在两种情况下检查存储在'x'中的地址,'test'结尾处的一个和'main'中''printf''的一个将显示出问题。提示:在'test'中赋值'x = ...'对调用者('main')意味着* nothing *,并且'x'保持不变。 – WhozCraig
1)不要将'malloc()'2)返回的值转换为调用程序中指针指向新地址,指针必须作为“指针指针”传递。 I.E. '测试(&x);''和函数测试需要签名:'void test(double ** x)'注意'**'然后设置该值必须取消引用传入的指针IE * * = malloc(2 * sizeof(double));'然后'x'是指向指针的指针(并注意C运算符的优先级)使用:'(* x)[0] = 2;' – user3629249