在线时间1846 小时
UID3338155
ST金币1693
蝴蝶豆32
注册时间2016-12-11
该用户从未签到
论坛元老
- 最后登录
- 2023-2-9
|
本帖最后由 andeyqi 于 2019-4-26 09:40 编辑
背景:
今天和同事调试联调代码时出现一个死机,死机的原因是同事对外提供了个类似这样的接口 void fun(type,vodi * data),根据不同的type返回不同的数据类型。不过在出问题的场景同事的接口将一个值6直接赋给给void* data,内部解析时按照指针解析数据,结果可想而知访问非法地址肯定挂了。
主题:
后来和同事讨论下,这样传递值好像不好,传递值应该通过指针来获取数值6,不应该直接将6当作void* 的值传递,讨论半天他一直认为void * 是个万能类型怎么传都行,虽然实现上没有问题,不过个人认为这样对接口的使用者来说很容易出错。而且个人感觉除了有歧义外,这么写没有什么优点,而且通过这种方式能实现的传递地址也都能搞定的,想了半天没想到为什么要这么写,希望和大家讨论下看看大家有什么高见。
后续:- func1(int type,void * data)
- {
-
- }
- /* system entry point */
- int main(void)
- {
- int i = 6;
- func(1,6);
- }
复制代码 这种写法隔个人能想到的优势是:
上述的伪代码中可以少定义一个变量,不需要定义int i ,6这个数字通过值的方式传递,而不是通过地址传递,不过传的是个非法地址出现死机,如果是个合法地址,那么代码就会使用未知的值。
|
|