방금 구조체를 시작했고 그래프 관련 알고리즘 구현에 사용할 인접 행렬을 만들기 위해 구조체를 구현하는 데 관심이있었습니다. 그래서 그래프에서 포인터 변수에 대한 포인터를 만들어 2D 매트릭스의 기본 주소로 사용했습니다. 그러나 배열에 메모리를 할당하려고하면 오류가 표시됩니다.구조체의 포인터에 대한 포인터를 사용하여 2 차원 배열 만들기
Conversion to non-scalar type requested
아무도 도와 줄 수 있습니까? 나는 다음에 전체 코드를 게시하고있다 : -
struct graph{
int v;
int e;
struct graph **admat;
};
void main()
{
int x,i,y,z=1,n;
struct graph *G=(struct graph **)malloc(sizeof(struct graph));
printf("\nenter number of vertices: ");
scanf("%d",&G->v);
printf("\nenter number of edges: ");
scanf("%d",&G->e);
G->admat=(struct graph **)malloc(G->v * sizeof(struct graph *));
for(i=0;i<G->v;i++)
{
G[i]=(struct graph)malloc(G->v * sizeof(int));//here is the main error
}
for(x=0;x<i;x++)
{
for(y=0;y<i;y++)
{
G[x][y]=z++;
}
}
for(x=0;x<i;x++)
{
for(y=0;y<i;y++)
{
printf(" %d ",G[x][y]);
}
printf("\n");
}
}
'malloc'에서 캐스트를 제거하십시오. 그리고 만약 당신이 'int'를 잡고 싶다면,'struct graph ** admat;'->'int ** admat;' – BLUEPIXY
G는 하나의 포인터이지만 두 번 포인터를 형변환하고 있습니다. 그건 옳지 않아. 나는 G가 double pointer가되어야하는지 아니면 struct element admat가 double pointer인지에 대해 혼란스러워한다고 생각합니다. 그것은 명확히해야합니다. –
G [x] [y] = z 지정이 올바르지 않습니다. G는 구조체입니다. z 값을 저장하는 구조 요소가 필요합니다. –