이 코드는 일련의 함수 호출을 통해 행렬을 할당하지만 인쇄 할 때 세그먼트 오류 오류가 반환됩니다. 내가 함수 mat_fill()가 제대로 초기화되어 있다고 보여 제대로 작동에 사용하는 경우 내가 mat_print를 사용하여 매트릭스를 인쇄하면이에만 발생하는 것이동적으로 할당 된 행렬은 인쇄시 seg 오류를 발생합니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void mat_init(int** matx);
void pp_init(int** matx);
void p_init(int** matx);
void mat_fill(int** matx);
void mat_print(int** matx);
int main(void)
{
srand((unsigned)time(NULL));
int** matrix;
mat_init(matrix);
mat_print(matrix);
return 0;
}
void mat_init(int** matx)
{
pp_init(matx);
}
void pp_init(int** matx)
{
matx=malloc(4*sizeof(int*));
p_init(matx);
}
void p_init(int** matx)
{
for(int i=0;i<4;i++)
{
*(matx+i)=malloc(4*sizeof(int));
}
mat_fill(matx);
}
void mat_fill(int** matx)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
*(*(matx+i)+j)=rand()%5;
}
}
//mat_print(matx);
}
void mat_print(int** matx)
{
printf("The matrix is:\n");
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
printf("%1i|",*(*(matx+i)+j));
}
puts("");
}
puts("");
}
주(), 주를 int로. 무엇이 문제입니까?
왜? 매트릭스의 주소가 아닙니다. 이미 함수에 전달하고 있습니까? 왜 포인터를 첫 번째 함수 포인터에 전달해야합니까? – Adonai
c의 모든 값이 전달됩니다. 'matx'를 함수에 넘겨 주면 마치'int'를 전달한 것처럼 로컬 복사본이 만들어집니다. 해당 로컬 복사본에서 수행하는 모든 조작은 해당 로컬 범위로 제한됩니다. 로컬 범위 외부에서 로컬 조작을 보길 원하면 값을 반환해야합니다 (또는 여기에서와 같이 포인터의 참조를 취소하고 포인터의 의미를 수정할 수 있습니다). 그러나'matx'는 당신이 그것을 여기에 전달할 때 아무 것도 가리 키지 않습니다. '& matx'를 넘겨 주면 뭔가를 가리키고 있지만 3 점 포인터를 다루는 것은 내 경험에 흔한 일이 아닙니다. – yano
포인터에 대한 행렬 포인터가 함수에 전달 될 때 초기화되지 않기 때문에 작동하지 않습니다 ... if matrix = malloc (4 * sizeof (int *)); 주에서, pp_init를 없애 버렸습니다. 아마도 – Adonai