新睿云

> 知识库 > 使用memset需谨慎 内存泄漏多弊端

使用memset需谨慎 内存泄漏多弊端

作者/来源:小睿 发布时间:2019-12-18

Memset是C/C++语言的初始化函数,将某一块内存中的内容全部设置为指定的值,对较大结构体或数组进行初始化或清零操作的最快方法。

但是清零操作需谨慎。因为在使用memset时会发生内存泄漏的问题。内存泄漏是堆内存的泄露。程序从堆中分配的内存使用完毕后必须显示释放,否则该内存就不能再次使用,这就是发生了内存泄露。

memset

内存泄漏导致软件占用更多的内存,降低应用程序的运行效率,进而影响用户体验,造成用户大量流失,在市场中因没有优势而在竞争中被淘汰。

因而,为了预防内存泄露,在使用memset函数从堆中分配的内存时必须在使用完成后调用free或delete函数来释放内存。但如果指向该内存指针的值被修改了,不再指向该内存了,那么即使调用free、delete函数也不会释放该内存,memset函数就会导致这种情况的发生。

那么,在这种情况下,如何对字符串进行清零呢?通过以下实例来进行了解。

memset

原因如下:string/wstring是C++标准库的类,而用memset来对包含有指针的类对象的结构体清0是非常危险的,该清0操作导致string/wstring的内部结构遭到破坏,已经申请到的内存得不到释放,因而导致内存泄露。

解决办法:

memset

可见,使用memeset时,清零操作出现了内存泄漏问题,智能使用原始方法逐一清零的方式来进行清零操作。

热门标签
new year
在线咨询
咨询热线 400-1515-720
投诉与建议
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待