这句话有两重含义:
- 比较大众比较传统的含义就是这么干容易让外部调用者忽略掉这块内存需要释放,从而导致泄露。
- 更深一层更隐蔽的问题是:函数内部的malloc和外部调用者后续的free,不一定是同一个库!尤其考虑到动态库或者有可能有一些hook的时候,这种情况会更复杂(当然,一般情况下,要动malloc/free,是应该成对动的,但也不能轻易保证)。
当然,这种风险一般只存在于库的API,或者跨库调用之中,一般其它函数不一定需要这么敏感。
多说一句:基于同样的原因,跨库使用模板类,包括几乎所有的STL对象都是同样危险的,甚至风险更大点:两个库共享一个类模板,但是分别编译环境不同,甚至可能因为STL版本实现不同而导致操作逻辑甚至内存布局都发生变化。