Valgrind报uninitialized value was created by a heap allocation

时间:2020-12-30 04:06:35
程序运行正常,可是在测memery leak的时候报上面那个错,具体错误消息如下:
==25663== Conditional jump or move depends on uninitialised value(s)
==25663==    at 0x400C9F: add_edge (graph.c:59)
==25663==    by 0x40071A: main (main.c:13)
==25663==  Uninitialised value was created by a heap allocation
==25663==    at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==25663==    by 0x400A80: add_vertex (graph.c:22)
==25663==    by 0x400DF8: add_edge (graph.c:84)
==25663==    by 0x40071A: main (main.c:13)

我的程序用链接表构建一个无向图来解决TSP的. 
graph.c:22
for(adj_v=(*vp)->adj_list; adj_v->next!=NULL; adj_v=adj_v->next);
adj_v->next = (adj_vertex_t *)malloc(sizeof(adj_vertex_t));
adj_v=adj_v->next;
adj_v->edge_weight=weight;
我这个该怎么初始化新alloc的memery space呢?因为我马上要加新的节点信息到这个地方了,看起来应该没问题啊?C语言不太好,请大牛指教

5 个解决方案

#1


只是报没有初始化,可以不管,如果想初始化可以使用memset来清0

#2


引用 1 楼 thefirstz 的回复:
只是报没有初始化,可以不管,如果想初始化可以使用memset来清0

没有必要把memset清零和malloc连用……
这个时候calloc就该出场啦……

#3


所有报错的地方都是循环语句,类似于
for(vp = *vtxhead; vp != NULL; vp = vp->next){

是不是说最后vp->next是NULL的时候,Valgrind误认为是uninitialized value,如果是这个问题的话,该怎么解决呢?

#4


这个所谓“错误”可以忽略不看
要不楼主就试用calloc( 1, sizeof(adj_vertex_t))代替malloc(sizeof(adj_vertex_t))


#5


谢谢大家回复!

#1


只是报没有初始化,可以不管,如果想初始化可以使用memset来清0

#2


引用 1 楼 thefirstz 的回复:
只是报没有初始化,可以不管,如果想初始化可以使用memset来清0

没有必要把memset清零和malloc连用……
这个时候calloc就该出场啦……

#3


所有报错的地方都是循环语句,类似于
for(vp = *vtxhead; vp != NULL; vp = vp->next){

是不是说最后vp->next是NULL的时候,Valgrind误认为是uninitialized value,如果是这个问题的话,该怎么解决呢?

#4


这个所谓“错误”可以忽略不看
要不楼主就试用calloc( 1, sizeof(adj_vertex_t))代替malloc(sizeof(adj_vertex_t))


#5


谢谢大家回复!