打印

指针调用问题

[复制链接]
1913|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
午夜霓虹|  楼主 | 2011-9-5 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近发现一个问题,在函数入口处有指针调用,并且指向局部变量的时候,有时多级调用函数,返回的指针数据就会错乱,而如果指向全局变量,则不会错乱。
沙发
hgjinwei| | 2011-9-5 12:49 | 只看该作者
不知所云

使用特权

评论回复
板凳
午夜霓虹|  楼主 | 2011-9-5 16:26 | 只看该作者
举个例子哈
定义一个函数 void   tk(void)
             {
                定义一个数组
              uint8_t    ck[4];
                    调用一个函数
                 lk(ck);
                调用返回结果
              }

函数void  lk(uint8_t *mk)
      {}

如果把数组ck定义成全局变量,返回结果什么时候都正确,如果是全局变量,有时候就会错,特别是如果lk再次有调用其他函数用到这个指针就会更错。

使用特权

评论回复
地板
午夜霓虹|  楼主 | 2011-9-5 16:27 | 只看该作者
不知道这么说能不能清楚的说明这个问题呢。

使用特权

评论回复
5
香水城| | 2011-9-5 16:30 | 只看该作者
1)函数tk()定义为void,怎么会有返回结果?

2)如果lk再次有调用其他函数用到这个指针,再次调用什么函数?估计有访问溢出!

使用特权

评论回复
6
午夜霓虹|  楼主 | 2011-9-5 19:10 | 只看该作者
tk 不会有返回结果,lk通过指针返回数据。返回到数组ck中。

使用特权

评论回复
7
午夜霓虹|  楼主 | 2011-9-5 19:12 | 只看该作者
再次调用函数 在lk中有这样的函数  void lk(uint8_t *i)
                                                    {
                                                         zk(i);
                                                      }

就是局部变量数组的地址多次传递的时候就会出错。

使用特权

评论回复
8
ahgao| | 2011-9-5 20:23 | 只看该作者
栈溢出

使用特权

评论回复
9
sysdriver| | 2011-9-5 20:28 | 只看该作者
最后搞清楚,堆栈能有几级?不然你这个函数定义几个数组,那个也定义,还包括调用函数等等,没有个30级别的还真可能溢出。

使用特权

评论回复
10
午夜霓虹|  楼主 | 2011-9-6 08:58 | 只看该作者
好像还不是堆栈的问题,我把堆栈设置大了一倍效果还是那样,我把堆栈减小,而且减少了一个传入变量,结果接正确了,哈哈,有些奇怪。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

462

帖子

1

粉丝