【发布时间】:2018-12-02 05:34:06
【问题描述】:
这是我的结构
struct node{
int V,E;
int **adj;
};
这是我创建图表的代码:
struct node* create()
{
int i,j,x,y;
struct node *G=malloc(sizeof(struct node));
printf("Write the number of vertex and edges\n");
scanf("%d%d",&G->V,&G->E);
G->adj=malloc(sizeof(int)*(G->V * G->V));
if(!G->adj){
printf("Out of memory\n");
return;
}
for(i=0;i<G->V;i++)
for(j=0;j<G->V;j++)
G->adj[i][j]=0;
printf("\nWrite the source node and destination: ");
for(i=0;i<G->E;i++){
scanf("%d%d",&x,&y);
G->adj[x][y]=1;
G->adj[y][x]=1;
}
return(G);
}
我将这个函数返回的指针存储在另一个指针中,如下所示:
int main()
{
struct node *G=create();
}
当我编译程序时,我被要求输入顶点和边的数量,但只要我输入值,我的程序就会崩溃。我想知道原因。这是因为内存分配失败吗?
【问题讨论】:
-
我看到的是小尼特。不检查有效输入(输入图形边时的顶点数、边数、节点号),不检查 G 是否为 NULL,并且当 malloc 返回 NULL 时,return 语句中没有值。最后一点甚至无法在我使用的编译器上编译。
-
关于邻接矩阵的两个注意事项:首先, calloc() 将为您将矩阵归零,如果您的矩阵将全部为 0 和 1 值,您可以使用
char来节省内存int的元素类型。但首先,您可能想说明您使用的是什么输入... -
@MikeHousky 没关系!但我不能有任何记忆问题。我有一个 4 GB 的 RAM。我的代码有问题。你能猜出是怎么回事吗?
-
“但首先,您可能想说明您使用的是什么输入。”在 return 语句修复之后,我在编译时没有收到任何错误。
-
我使用 4 作为顶点数,使用 5 作为边数。对于邻接矩阵,我将使用 0 和 1
标签: c function matrix graph malloc