我有以下功能:
edge** graph_out_edges(graph* g, int src) {
int i;
int num_edges = 0;
edge** es = (edge**) malloc(sizeof(edge*) * g->num_edges);
for (i = 0; i < g->num_edges; i++) {
if (src == g->edges[i]->src) {
es[num_edges++] = g->edges[i];
}
}
es[num_edges] = NULL;
return es;
}
我使用b graph_out_edges
向函数添加断点,使用r
运行程序,然后继续(c
)两次(如果我再次继续,我会得到段错误)。然后我n
通过该函数,直到它在调用函数
edge** new = graph_out_edges(g, min->dest);
p new[0]
和p new[1]
提供有效边(成员已填充),p new[2]
提供0x0
,如预期的那样。然后我键入r
重新启动程序,再次继续两次,但这次我输入ret
(确认我要返回),键入n
来执行赋值,但现在当我输入p new[0]
我
Cannot access memory at address 0x2
(为了清楚起见,p new
现在说$10 = (edge**) 0x2
)
有关为什么手动“n
退出”手动返回值与强制退货之间存在差异的原因的任何建议?
答案 0 :(得分:0)
在函数中,如果你保证es的值是正确的,那么在调用之后,new的值应该是正确的。
也许,我想,
First, check the es;
Then, compare the return value of new with es.