C语言--内存泄漏之越界

…衆ロ難τιáo~ 提交于 2020-02-17 23:17:49

在软件开发过程中,我们常常会遇到内存泄漏问题。

一旦发生内存泄漏问题,就是个令大部分程序员头疼的问题,因为这太难找了,泄漏导致的死机,并不一定就是死机的地点,这就加大了开发难度。

这篇就聊聊函数传参要注意的事儿。

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嘻嘻

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!