成功初始化后,struct成员被垃圾值覆盖

我一直在调试这个函数很长一段时间了,无法用这段代码包裹我的头。成功初始化后,struct成员被垃圾值覆盖

void make_points(DocSpec instance, Tree *myTree, Point *p){ 

int i, j, k, index = 0;

for(i = 0; i < instance.numPt; i++)

{

p[i].x = instance.xCoordinates[i];

p[i].y = instance.yCoordinates[i];

p[i].parent = myTree[i].parent;

p[i].num_children = 0;

for(k = 0; k < MAX_NUM_CHILDREN; k++)

{

p[i].child[k] = 0;

}

for(j = 0; j < instance.numPt; j++)

{

if((i != j) && (myTree[j].parent == i))

{

p[i].num_children++;

p[i].child[index] = j;

index++;

}

}

p[i].overlap_hv = -1;

p[i].overlap_vh = -1;

index = 0;

}

printf("p[1].index = %d;\n", p[1].index);

printf("p[1].x = %d;\n", p[1].x);

printf("p[1].y = %d;\n", p[1].y);

printf("p[1].parent = %d;\n", p[1].parent);

printf("p[1].num_children = %d;\n", p[1].num_children);

printf("p[1].child[8] = {");

index = 0;

for(i = 0; i < MAX_NUM_CHILDREN; i++)

{

if(p[1].child[i] != 0 && index == 0)

{

printf("%d", p[1].child[i]);

}

elseif(p[1].child[i] != 0)

printf(", %d", p[1].child[i]);

}

print("};\n");

printf("p[1].overlap_hv = %d;\n", p[1].overlap_hv);

printf("p[1].overlap_vh = %d;\n", p[1].overlap_vh);

}

运行功能后,我得到的输出如下:

p[1].index = 1; 

p[1].x = 0;

p[1].y = 90;

p[1].parent = 5;

p[1].num_children = 0;

p[1].child[8] = {1563515760, 1768448814, 945513580, 540876893};

p[1].overlap_hv = 909455739;

p[1].overlap_vh = 892679225;

但它应该是:

p[1].index = 1; 

p[1].x = 0;

p[1].y = 90;

p[1].parent = 5;

p[1].num_children = 0;

p[1].child[8] = {};

p[1].overlap_hv = -1;

p[1].overlap_vh = -1;

当我跑我的程序gdb的,我注意到p [1]的值已正确初始化,但当

printf("p[1].x = %d;\n", p[1].x); 

被执行 - p [1] .child [4],p [1] .child [5],p [1] .child [6],p [1] .child [7],p [1]。 overlap_hv,p [1] .overlap_vh全部被垃圾值覆盖。

我不知道为什么或如何一个printf语句可以更改我的结构成员的值。

任何帮助将不胜感激。

回答:

我的猜测是,index是过路的孩子边界和j覆盖下一个结构成员p[1].overlap_hvp[1].overlap_vh

    p[i].child[index] = j; 

index++;

回答:

原来重新分配内存时,我没有使用正确的类型转换。与Valgrind的快速检查让我立即找到了罪魁祸首。

p = (Point*) realloc(p, instance.numPt * sizeof(p)); 

,这是固定

p = (Point*) realloc(p, instance.numPt * sizeof(Point)); 

感谢所有的建议。

以上是 成功初始化后,struct成员被垃圾值覆盖 的全部内容, 来源链接: utcz.com/qa/258882.html

回到顶部