그래프 인접 행렬에 대해 아래 코드를 작성했지만 침강 오류 오류가 발생합니다. malloc 문에 문제가 있다고 생각하지만 무엇인지 모르겠습니다. 이 문제를 어떻게 해결할 수 있습니까?
#include<stdio.h>
#include<stdlib.h>
struct Graph
{
int V;
int E;
int **adj;
};
struct Graph *adjMatrix()
{
int i,u,v;
struct Graph *G=(struct Graph*)malloc(sizeof(struct Graph));
printf("Enter vetrices and edge\n");
scanf("%d %d",&G->V,&G->E);
G->adj=malloc(sizeof(1)*((G->V) * (G->V)));
for(u=0;u<(G->V);u++)
{
for(v=0;v<(G->V);v++)
{
G->adj[u][v]=0;
}
}
for(i=0;i<(G->E);i++)
{
printf("Enter source vertces and dest vertix ");
scanf("%d %d",&u,&v);
G->adj[u][v]=1;
G->adj[v][u]=1;
}
return G;
}
int main()
{
struct Graph *T=adjMatrix();
printf("%d",T->adj[0][0]);
return 0;
}
이:
G->adj=malloc(sizeof(1)*((G->V) * (G->V)));
정수에 대한 포인터 배열을 보유하고 있다고 가정되는 포인터에 정수의 1 차원 평면 배열을 할당합니다. ( sizeof(1)
과 동일합니다 sizeof(int)
.)
행렬에로 액세스 G->adj[u][v]
하려면 배열의 두 차원에 대해 메모리를 할당해야합니다. 이를 수행하는 한 가지 방법은 포인터 배열을 int에 할당 한 다음 각 포인터에 int 배열을 할당하는 것입니다.
G->adj = malloc(sizeof(*G->adj) * G->V);
for (i = 0; i < G->V; i++) {
G->adj[i] = malloc(sizeof(*G->adj[i]) * G->V);
}
또한 사용자가 입력 한 정점이 실제로 인접 행렬의 경계 내에 있도록해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다