调试时的数据异常,赋值操作不正确

开心的卡夫卡 2012-09-24 11:13:33


如图,单步调试时在执行到
(*config).iloader = 0;

这句之前的一些代码是对config指针的内存分配以及数据清空,结构体中只有简单的数据类型。

但对结构体数据清空后发现结构体中的数据仍不为0,如

上句执行之前的 iloader的值是 187。

这个是不理解之一。

其二,即便这样也欲将iloader的值赋为0,于是就有了

上面的语句 (*config).iloader = 0;

但这句执行后发现iloader的值仍为187 并没有被更改。

这是第二个疑惑。

-------------------------------------------------------------------------

如果有哪位遇到过类似的情况或经历请麻烦帮忙分析或者回忆下。

还有类似如下

 
int iCurr;

iCurr = config->iloader;

if(iCurr<NLOADERS)
(*config).loaders[(*config).iloader] = loader;
(*config).iloader++;

上面的config->iloader的值有时候是0

但是赋到iCurr后发现iCurr的值就已经不是0,而是其他值。

遇到这样的问题,没了头绪。

希望有经验的兄弟或者前辈可以想一想。

--------------------------------------------------------------

程序运行环境 vc6.0

源文件类型
.h
.c
---------------------------------------------------------------
不胜感激。
谢过 ;)
...全文
291 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
开心的卡夫卡 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:

引用 4 楼 的回复:
重建所有

已经重建过很多次,发觉问题仍旧依存。
谢谢帮助。


你不会在针对release做debug吧?如果是这样的话,神马情况皆有可能。
[/Quote]

多谢兄弟提请,我确定在debug下调试的。
出现这样情况,实在棘手。
pathuang68 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
重建所有

已经重建过很多次,发觉问题仍旧依存。
谢谢帮助。
[/Quote]

你不会在针对release做debug吧?如果是这样的话,神马情况皆有可能。
开心的卡夫卡 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
重建所有
[/Quote]
已经重建过很多次,发觉问题仍旧依存。
谢谢帮助。
赵4老师 2012-09-25
  • 打赏
  • 举报
回复
重建所有
开心的卡夫卡 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tongzhipeng5699 的回复:]
清空的时候是用memset吗? 这样情况的话, 应该都是0了。
赋值不成功的问题不清楚。
[/Quote]

是的如下


void *zalloc(size_t size)
{
void * ret;

if ((ret = (void *)malloc(size)) != NULL)
{
memset(ret, 0, size);
}

return(ret);

}

以上是清空内存。谢谢你的帮助;
tongzhipeng5699 2012-09-25
  • 打赏
  • 举报
回复
清空的时候是用memset吗? 这样情况的话, 应该都是0了。
赋值不成功的问题不清楚。
开心的卡夫卡 2012-09-25
  • 打赏
  • 举报
回复
求助,谢谢!
ddcelf 2012-09-25
  • 打赏
  • 举报
回复
可以调试,那就汇编跟一下,这种简单的赋值应该看得懂。
如果还有困难,查看内存:config地址和(*config).iloader地址,然后单步,把这两个值发生变化那段汇编贴上来。

70,020

社区成员

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

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