根據C FAQ on instantiating a matrix using a double pointer的建議,我偶然發現了另一個問題。我設法解決了這個問題,但很難理解爲什麼它以一種方式而不是另一種方式工作。修改通過引用傳遞的變量與從函數返回的變量
我有下面的代碼的工作,然後我會告訴你不工作的位,我希望你能解釋一下爲什麼:
3210分配網格內存和返回這種方式的指針工作。然而,我第一次嘗試另一種方式,我相信應該也可以使用,但它並不:
#include <stdio.h>
#include <stdlib.h>
int HEIGHT = 20;
int WIDTH = 20;
int ** curr_grid;
/**
* Generate an array with the given height and length
*/
create_grid(int ** grid) {
grid = malloc(sizeof(int *) * HEIGHT);
int row;
for (row = 0; row < HEIGHT; row++)
grid[row] = malloc(sizeof(int) * WIDTH);
}
/* Entry Point main */
int main(int argc, char** argv) {
create_grid(curr_grid);
curr_grid[0][0] = 0; // Segmentation Fault
free(curr_grid); // Release heap resources
return 0;
}
這樣做,這樣與上標明的線路段故障。但是,我的印象是,通過引用傳遞變量允許您修改它。
爲什麼這不工作?
函數內部的'grid'是從'main'傳入的參數的**副本** ... –
您的標題顯示「通過引用傳遞」,但實際上並沒有這樣做。 –
它可能會泄露我是一個完整的C新手。如果您對重命名該問題有任何想法,我將非常感激。 – mydoghasworms