我通过递归的形式将上一层的指针传给下一层,下一层在获取值时出现了越界的情况,下一层的p->k越界了,但是p->total_weight却可以正常访问到。求大神解答
void Enum_Tree_Create(GraphAdjoinList *G, int number, EnumTreeList *p){
if(p->k==G->numNodes){
if(p->total_weight<min){
min = p->total_weight;
arrayCopy(minPath, p->path, p->k);
}
}
int i=0;
for(EdgeNode *e = G->adjList[number].firstedge;e;e=e->next,i++){
if(!visited(p, G->adjList[e->adjvex].data)){
EnumTreeList *v = (EnumNode*)malloc(sizeof(EnumNode));
arrayCopy(v->path, p->path, p->k);
v->path[p->k++] = G->adjList[e->adjvex].data;
v->total_weight = p->total_weight + e->weight;
p->child[i] = v;
Enum_Tree_Create(G, e->adjvex, p->child[i]);
}
}
}
看了下你的代码,p是一个指向EnumTreeList结构体的指针,而最后一行的Enum_Tree_Create(G, e->adjvex, p->child[i]);,你将p的某个子节点的指针作为参数传递给了Enum_Tree_Create函数。这意味着在递归的下一层调用中,p指向的是原始的EnumTreeList结构体,而不是原始的子节点。在这种情况下,如果你在下一层中使用p->k来访问某个子节点的成员变量,因为这个子节点的内存布局可能与EnumTreeList结构体的内存布局不同,p->k访问可能越界。
因此,改下递归的指向p->k就可以解决: