在软件开发过程中,我们常常会遇到内存泄漏问题。
一旦发生内存泄漏问题,就是个令大部分程序员头疼的问题,因为这太难找了,泄漏导致的死机,并不一定就是死机的地点,这就加大了开发难度。
这篇就聊聊函数传参要注意的事儿。
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个字节的数值填入