2
이 작업을 실행할 때 세그멘테이션 오류가 발생하지만 오류는 발생하지 않습니다. 포인터 배열에 포인터를 전달하려고합니다. 포인터 배열로 초기화하고 배열 및 호출 함수에서 사용할 수있는 데이터를 채 웁니다.빈 배열을 참조로 전달하고 함수 내에서 초기화하십시오.
static void test4(int ***arr)
{
int *values = (int *) MEM_mallocN(sizeof(int) * 3, "*values");
values[0] = 0;
values[1] = 1;
values[2] = 2;
*arr = (int **) MEM_mallocN(sizeof(int *) * 3, "*arr");
*arr[0] = &values[0];
*arr[1] = &values[1];
*arr[2] = &values[2]; /* this line causes crash */
}
static void test3(void)
{
int **arr = NULL;
test4(&arr);
for (int i = 0; i < 3; i++) {
printf("arr[%d] = %p \n", i, arr[i]);
}
for (int i = 0; i < 3; i++) {
printf("arr[%d] = %d \n", i, *arr[i]);
}
}
'* arr [0]'은'(* arr) [0]'이 아니라'* (arr [0])'입니다. – Ryan
여기 포인터를 포인터로 사용해야하는 분명한 이유는 없습니다. 이 엉망인 3 스타 프로그래밍 대신 [다차원 배열을 올바르게 할당] (https://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays)을 원할 수 있습니다. – Lundin
C에는 참조가 없습니다. 당신은 포인터를 사용합니다. 그리고 3 별 프로그래머가되는 것은 칭찬이 아닙니다. – Olaf