指针调用问题

[复制链接]
 楼主| 午夜霓虹 发表于 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 | 显示全部楼层
不知道这么说能不能清楚的说明这个问题呢。
香水城 发表于 2011-9-5 16:30 | 显示全部楼层
1)函数tk()定义为void,怎么会有返回结果?

2)如果lk再次有调用其他函数用到这个指针,再次调用什么函数?估计有访问溢出!
 楼主| 午夜霓虹 发表于 2011-9-5 19:10 | 显示全部楼层
tk 不会有返回结果,lk通过指针返回数据。返回到数组ck中。
 楼主| 午夜霓虹 发表于 2011-9-5 19:12 | 显示全部楼层
再次调用函数 在lk中有这样的函数  void lk(uint8_t *i)
                                                    {
                                                         zk(i);
                                                      }

就是局部变量数组的地址多次传递的时候就会出错。
ahgao 发表于 2011-9-5 20:23 | 显示全部楼层
栈溢出
sysdriver 发表于 2011-9-5 20:28 | 显示全部楼层
最后搞清楚,堆栈能有几级?不然你这个函数定义几个数组,那个也定义,还包括调用函数等等,没有个30级别的还真可能溢出。
 楼主| 午夜霓虹 发表于 2011-9-6 08:58 | 显示全部楼层
好像还不是堆栈的问题,我把堆栈设置大了一倍效果还是那样,我把堆栈减小,而且减少了一个传入变量,结果接正确了,哈哈,有些奇怪。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

463

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

57

主题

463

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部