在软件开发过程中,我们常常会遇到内存泄漏问题。
一旦发生内存泄漏问题,就是个令大部分程序员头疼的问题,因为这太难找了,泄漏导致的死机,并不一定就是死机的地点,这就加大了开发难度。
这篇就聊聊函数传参要注意的事儿。
C 库函数 int sscanf(const char *str, const char *format, ...) 想必程序猿们都熟悉他,这个函数的作用是从字符串读取格式化输入。
很多新手使用的时候并未注意到参数是指针,而这指针空间是由使用者赋予的。如果使用不当,会导致输入的空间小于需要输出的空间,从而造成内存泄漏死机。
举个例子:
uint8_t tmp_mac[6] = {0};
sscanf(mac, "%x:%x:%x:%x:%x:%x",
&tmp_mac[0],
&tmp_mac[1],
&tmp_mac[2],
&tmp_mac[3],
&tmp_mac[4],
&tmp_mac[5]
);
这段代码有什么问题嘛?
当然有了,sscanf的%x输出的格式是有要求的

是使用int类型输出,上例输出的格式是定义为uint8_t 也就是1个字节,而int是4个字节的,将4个字节的数值填入1个字节的空间,这就是我们常说的越界了,而这种问题,又是很难查的,要是没有注意到sscanf的这个特性,是真的不好查找越界的原因的。反正我是查了好久好久。。。(小声BB:这就是经验啊)
上述只是描述了一种越界,其他的越界也是一样的道理,还是要在写代码的时候认真敲代码,不然这种问题出来后,一不小心项目delay就哭唧唧了,呜呜呜我的工资
最后配图还是gakki嘻嘻
来源:CSDN
作者:超超不是草草
链接:https://blog.csdn.net/qq_30309813/article/details/104360936