打印
[应用相关]

[请教]关于函数中意外修改指针内容

[复制链接]
2599|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxdengos|  楼主 | 2009-8-28 12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
又得麻烦大家讨论一下了!我先谢过了!

我设计程序的时候,使用了函数指针将一个结构体指针Item传递到对应函数中,但是在函数指针对应的函数中,一些没有使用到结构体指针Item的函数,却意外地修改了结构体的内容,请问大家是什么问题?我使用的是IAR

之前我使用Keil的51开发时候,也遇到过这种情况,不过减少全局变量的使用,则全局变量不会被不相关函数影响,不知在这个地方也是这个问题?

但是我就开辟了2-3个全局变量,不可能多啊

谢谢大家!
沙发
yxdengos|  楼主 | 2009-8-28 13:47 | 只看该作者
在线等!

谢谢大家!

使用特权

评论回复
板凳
香水城| | 2009-8-28 13:49 | 只看该作者
这个问题恐怕只有你自己知道了。

我能想到的只可能是堆栈溢出。

你还是通过调试,一步一步地看看,在哪里修改了不该修改的数据。

使用特权

评论回复
地板
yxdengos|  楼主 | 2009-8-28 13:59 | 只看该作者
好的!

谢谢香主 我马上去查查堆栈!

那些函数对于一个全局指针没有任何操作!我都觉得怪了

使用特权

评论回复
5
yxdengos|  楼主 | 2009-8-28 14:27 | 只看该作者
在这方面还有些不明白…… 我如何看到堆栈溢出呢?

发现在调用函数指针之前,一切变量都是正常的,但是一旦调用后,所有的值都发生了改变,仅仅发生在调用阶段 然后CStack由R0-R7变成了R0-R15

我怀疑是否需要修改icf值?

使用特权

评论回复
6
yxdengos|  楼主 | 2009-8-28 16:54 | 只看该作者
更新一下这个问题

同样使用函数指针 同样的函数 我在Main.c中使用和在其他.c文件中效果完全不一样 在其他文件中使用时根本结

构体指针都没有变化!

当然我的优化等级为None

使用特权

评论回复
7
yxdengos|  楼主 | 2009-8-28 19:38 | 只看该作者
在线等

使用特权

评论回复
8
电子白菜| | 2009-8-29 16:19 | 只看该作者
你函数里面有没有操作其他指针和数组啊?越界也是有可能的.

使用特权

评论回复
9
yxdengos|  楼主 | 2009-8-30 11:04 | 只看该作者
我这里面没有几个数组啊 我都数了好几遍了 没有超出范围啊

操作了指针所指向的内容 但是结构体指针其他的地方也被改动了啊

使用特权

评论回复
10
yxdengos|  楼主 | 2009-8-31 10:19 | 只看该作者
实在是太奇怪了

不同的.c文件调用还有不一样的结果

而且我发现只要我单步执行,结果就不会变化,但是只要我跳过一个函数,意外就发生了。我换了J-link 换了板子,结果都一样 就差没有换电脑了……

使用特权

评论回复
11
yxdengos|  楼主 | 2009-8-31 10:46 | 只看该作者
嗯感谢下大家的关心 今天情况好了 情况说明如下:

我在一个函数中开辟了一个结构体变量 然后将这个变量的地址值赋给全局变量 传递给一个函数 我将开辟的结构体变量修改为static修饰,则结果正常 小小的一个“static” 欢迎大家评论哈!

我认为没有用static定义的变量 那么存在在栈上 函数已经结束后则这个变量所在的地址那一片就变成“野”的啦 所以只要有函数调用 这个值就会发生意外改变 而且这也解释了 为什么在不同函数中结果不一样? 因为在当前函数中进行调用 这个栈还没有回收这个变量 而放到main.c 栈已经回收了空间

但是使用static定义了 那么变量放到了静态区 应该程序结束后 才会回收吧!

谢谢大家!欢迎评论!

使用特权

评论回复
评分
参与人数 1威望 +8 收起 理由
香水城 + 8
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

132

帖子

0

粉丝