我剛剛在一個月前開始編程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