gpt4 book ai didi

在 C 中创建具有邻接矩阵的图

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:47 26 4
gpt4 key购买 nike

我正在用 C 语言实现一个基于邻接矩阵的图形程序。但是在初始化矩阵(分配零值)时出现段错误。我不确定我是否在访问双指针时犯了任何错误。

谁能帮我解决这个问题?

代码如下:

struct Graph {
int V;
int E;
int **adj;
};


struct Graph *addelements() {
int i,j,a,u,v;

struct Graph *G= (struct Graph*)malloc(sizeof(struct Graph*));
printf("Enter the number of vertices and edges : ");
scanf("%d %d", &G->V,&G->E);;
printf("%d, %d\n",G->V ,G->E);
//G->adj = (int **)malloc(sizeof(int **)*(G->V * G->E));
G->adj = malloc(sizeof(G->V * G->E));

//Initialization of vertices

for(i=0;i<=G->V;i++) {
for(j=0;i<=G->V;j++) {
G->adj[i][j]=0;
}
}


//Reading the edges;
for(i=0;i<G->E;i++) {
printf("Enter the source and destination : ");
scanf("%d %d\n", &u,&v);
G->adj[u][v]=1;
G->adj[v][u]=1;
}

//printing the matrix

for(i=0;i< G->V;i++) {
for(j=0;i< G->V;j++) {
printf("%d", G->adj[i][j]);4
}
}

return G;
}


int main() {
struct Graph *a= (struct Graph*)malloc(sizeof(struct Graph*));
a = addelements();
}

输出:

Enter the number of vertices and edges : 4 5

Segmentation fault (core dumped)

最佳答案

正如你提到的,你的错误就在那里

G->adj = malloc(sizeof(G->V * G->E));

//Initialization of vertices

for(i=0;i<=G->V;i++)
{
for(j=0;j<=G->V;j++)
{
G->adj[i][j]=0;
}
}
  • 您正在写信给 adj[V][V]你在哪里分配了 sizeof(G->V * G->E) 的大小这将是 sizeof(int) (一个整数),即使你想要最多 adj[V][E]

  • 此外,您正在分配一维数组并访问二维数组,访问 adj[0][0]将首先尝试阅读 adj[0]作为指向数组的指针(未定义的值)并尝试写入 undefined[0]

分配 malloc( G->V * G->V * sizeof(int) )并使用 adj[i*V+j] 访问/写入

由于您期望代码的行为与它真正理解您的方式不同,您的逻辑中存在很多错误。使用调试器了解故障发生位置并检查相关变量可能很有用。

编辑:

也为 other answers提到:

您正在为 G 分配小尺寸作为malloc(sizeof(struct Graph*))相当于 malloc(sizeof(void*)) (分配一个指针的大小),你应该在哪里 malloc(sizeof(struct Graph))

第二次编辑:

注意到您的 j 中有一个拼写错误循环 for(j=0;i<=G->V;j++)应该是 for(j=0;j<=G->V;j++)

关于在 C 中创建具有邻接矩阵的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50635629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com