查错 指针为何被修改了

wd9053 2010-04-29 01:24:55
b.firstedge在断点1处正常,但是在断点2处却指向了一个新地址,不明白是什么原因
typedef struct EBox
{
VisitIf mark;
int ivex,jvex;
struct EBox *ilink,*jlink;
}EBox;

typedef char VertexType;

typedef struct VexBox
{
VertexType data;
EBox *firstedge;
}VexBox;
void Count(int** count, VexBox b, int index)//断点1
{
EBox* search = b.firstedge;//断点2
.............
}
...全文
86 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wd9053 2010-04-29
  • 打赏
  • 举报
回复
传入的是结构体而不是结构体数组,因此会复制一个结构体,里面的变量赋值情况随机。。。
黑娃 2010-04-29
  • 打赏
  • 举报
回复
因为你的类没有定义构造函数,ivex,jvex都是内置类型,你必须自己定义构造函数初始化它们
wd9053 2010-04-29
  • 打赏
  • 举报
回复
VexBox为结点,EBox为边
b.firstedge->ivex和b.firstedge->jvex为该边的两个顶点的索引值,这个值在0-(顶点数-1)之间,
刚调函数时,ivex,jvex均正常,下一个断点设在第一行语句,但到断点时b.firstedge->ivex和jvex被改为了一个很大的值
黑娃 2010-04-29
  • 打赏
  • 举报
回复
所谓断点1的b.firstedge正常是什么?值为0么?
但是我认为你断点1,2的b.firstedge值不同很正常,因为VexBox b形参并非引用,当调用count函数传入实参时会进行该对象的复制,所以断点2的b.firstedge是什么值取决于你传入的实参对象的b.firstedge指向了什么,而断点1的b.firstedge应该只是初始值。
wd9053 2010-04-29
  • 打赏
  • 举报
回复
没有赋值给b.firstedge->ivex啊
void Count(int** count, VexBox b, int index)//刚传入时b.firstedge->ivex正常
{
EBox* search = b.firstedge;//断点设在该行,发现b.firstedge->ivex已被修改
int i;
int j;
int k = 0;
while(search != NULL)
{
if(search->mark == unvisited)
{
search->mark = visited;
if(search->ivex <= search->jvex)
{
i = search->ivex;
j = search->jvex;
}
else
{
printf("no");
i = search->jvex;
j = search->ivex;
}
count[i][j]++;
}
printf("a");
if(search->ivex == index)
{
search = search->ilink;
}
else
{
search = search->jlink;
}
}
}
pengzhixi 2010-04-29
  • 打赏
  • 举报
回复
EBox *firstedge;//这个指针你有没有初始化,如果没有初始化,他指向的地址不确定。这段地址里面的内容也是未知的。所以也没什么好奇怪的。
itxuls 2010-04-29
  • 打赏
  • 举报
回复
赋值 初始化了吧
wd9053 2010-04-29
  • 打赏
  • 举报
回复
地址0x0031fae0之类的可以在VS中Watch窗口看到啊
itxuls 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
断点1 b.firstedge的地址你是怎么知道的呢?
[/Quote]

同问
wd9053 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 wd9053 的回复:]
b.firstedge在断点1处正常,但是在断点2处却指向了一个新地址
[/Quote]
这里我说的错了,地址没变,但里面的ivex,jvex,mark等值均改变了。我用VS调的时候发现一进入该函数ivex等值就会发生更改...
ericming200409 2010-04-29
  • 打赏
  • 举报
回复
按理应该是不会变的。。。。
pengzhixi 2010-04-29
  • 打赏
  • 举报
回复
断点1 b.firstedge的地址你是怎么知道的呢?
ljz888666555 2010-04-29
  • 打赏
  • 举报
回复
函数里又COPY了一份,重新分配了一块内存

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧