C FAQ on instantiating a matrix using a double pointer의 조언에 따라 다른 문제가 발생했습니다. 나는이 문제를 해결할 수 있었지만 그것이 왜 일방적으로 작동하는지 이해할 수는 없었습니다.참조로 전달 된 변수 수정과 함수에서 반환하는 변수 수정
I 작동하는 다음 코드를 가지고 있고, 나는 당신에게 작동하지 않는 비트를 표시합니다, 나는 당신이 이유를 설명 할 수 있기를 바랍니다 :
#include <stdio.h>
#include <stdlib.h>
int HEIGHT = 20;
int WIDTH = 20;
int ** curr_grid;
/**
* Generate an array with the given height and length
*/
int ** create_grid() {
int ** grid;
grid = malloc(sizeof(int *) * HEIGHT);
int row;
for (row = 0; row < HEIGHT; row++)
grid[row] = malloc(sizeof(int) * WIDTH);
return grid;
}
/* Entry Point main */
int main(int argc, char** argv) {
curr_grid = create_grid();
curr_grid[0][0] = 0;
free(curr_grid); // Release heap resources
return 0;
}
그리드에 대한 메모리를 할당하고 반환 이 방법으로 포인터가 작동합니다. 그러나, 나는 처음에는 또한 작동합니다 확신했다 또 다른 방법을 시도하지만, 그렇지 않습니다 :
#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'에서 전달 된 매개 변수의 ** copy **입니다 ... –
제목에 "passed by reference"가 표시되지만 실제로 수행하지는 않습니다. –
아마도 나는 완전한 C 초보자라는 것을 알 수 있습니다. 질문의 이름을 바꾸는 아이디어가 있다면 매우 감사 할 것입니다. – mydoghasworms