我正在使用邻接列表实现图形

时间:2014-09-28 13:35:47

标签: c

#include<stdio.h>
#include<stdlib.h>

struct node
{
    int value;
    struct node* next;
} *graph;

int main(void)
{
    int V,E,i,u,v;
    struct node *ptr,*ptr1;
    ptr=malloc(sizeof(struct node *));
    ptr1=malloc(sizeof(struct node *));
    scanf("%d",&V);
    graph=malloc(V*(sizeof(struct node *)));
    if(!graph)
        printf("Not allocated");

    for(i=0;i<V;i++)
    {
        graph[i].next=NULL;
    }

    scanf("%d",&E);
    for(i=0;i<E;i++)
    {
        //printf("**\n");
        scanf("%d %d",&u,&v);
        ptr=malloc(sizeof(struct node *));
        ptr1=malloc(sizeof(struct node *));
        ptr->value=u;
        ptr->next=graph[v].next;
        graph[v].next=ptr;
        ptr1->value=v;
        ptr1->next=graph[u].next;
        graph[u].next=ptr1;
    }

    for(i=0;i<V;i++)
    {

        ptr=graph[i].next;
        printf("**\n");
        printf("%d ===>\n",i);
        while(ptr)
        {
            printf("%d->",ptr->value);
            ptr=ptr->next;
        }
        printf("NULL\n");
    }
}

我收到以下错误

a.out:malloc.c:2369:sysmalloc:断言`(old_top ==(((mbinptr)(((char *)&amp;((av) - &gt; bins [((1) - 1) * 2])) - __ builtin_offsetof(struct malloc_chunk,fd))))&amp;&amp; old_size == 0)|| ((unsigned long)(old_size)&gt; =(unsigned long) (((__ builtin_offsetof(struct malloc_chunk,fd_nextsize))+((2 *(sizeof(size_t))) - 1))&amp;〜((2 *(sizeof(size_t) )) - 1)))&amp;&amp; ((old_top) - &gt; size&amp; 0x1)&amp;&amp; ((unsigned long)old_end&amp; pagemask)== 0)&#39;失败。 中止(核心倾销)

2 个答案:

答案 0 :(得分:1)

首先引起注意的是:

struct node *ptr,*ptr1;
ptr=malloc(sizeof(struct node *));
ptr1=malloc(sizeof(struct node *));

ptr和ptr1旨在指向struct node s,但是为struct node *分配空间。 graph的相同评论。

答案 1 :(得分:0)

你确定那些scanf调用正常吗?你确定输入值都在0 .. V-1范围内吗?

我建议为这两者添加错误检查。

此外,第一个ptr和ptr1 mallocs尚未使用。