成功初始化后,结构成员被垃圾价值覆盖
struct member gets overwritten by garbage value after successful initialization
我已经在此功能上进行了相当长的一段时间,无法将我的头缠绕在此代码中可能发生的事情。
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语句为什么或如何更改我的结构成员的值。
任何帮助将不胜感激。
事实证明,我在重新定位内存时没有使用正确的打字。与Valgrind进行快速检查,将我直接造成罪魁祸首。
有
p = (Point*) realloc(p, instance.numPt * sizeof(p));
这修复了
p = (Point*) realloc(p, instance.numPt * sizeof(Point));
感谢所有建议。
我的猜测是index
正在越过儿童边界,j
覆盖下一个结构成员p[1].overlap_hv
和p[1].overlap_vh
:
p[i].child[index] = j;
index++;
相关文章:
- 如果我必须覆盖非虚拟成员函数怎么办
- C++ 成员变量被非成员函数覆盖
- 如何基于每个成员覆盖类范围的__declspec(dllexport)注释?
- 覆盖复制/移动分配超载时,我是否需要删除当前的成员数据
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- 成功初始化后,结构成员被垃圾价值覆盖
- 基本派生的类成员覆盖.挑战活动11.3
- C 覆盖成员变量
- 覆盖运算符<< 对于控制台输出不适用于成员变量
- 成员数据在stack实例上覆盖
- 我可以覆盖一个抽象基类的成员吗
- 使用friend函数,我们可以覆盖类的私有成员吗
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- 将覆盖关键字和最终关键字与相同的成员函数一起使用是否有用
- 为什么结构内部的命名联合会覆盖其他结构成员
- 覆盖超类成员
- 为什么引用成员变量会相互覆盖
- 在c++ 0x中,非静态数据成员初始化式是否覆盖隐式复制构造函数?
- 用c++的成员函数覆盖成员数据
- 多个类型覆盖成员函数的模板部分特化