memset函数导致内存泄露
发布时间
阅读量:
阅读量
通常所说的内存泄漏指的是堆内存泄漏的情况。当程序从堆中分配了内存并用完后,则需要明确地回收这些空间;否则该区域将无法被重新利用。这种现象会导致系统在运行过程中不断占用越来越多的系统资源,并最终使得系统的效率将逐渐降低;进而影响用户体验并最终使企业失去市场竞争力。
为了防止出现内存在堆中泄露的情况我们让程序在执行过程中通过malloc和new等库函数来获取所需的堆内空间并确保这些空间在资源耗尽后及时通过相应的free和delete操作进行回收以避免潜在的风险。然而一旦某个用于标识这些块空间的指针发生变化并失效不再指向有效的块存储位置那么即使执行回收操作也不会真正清除这些无效的空间此时就会引发问题进而导致系统崩溃或者数据丢失的问题出现。现在让我们来详细了解一下有关 memset 函数的相关声明:
void *memset(void *s, int ch, size_t n); //将s中前n个字节用ch替换并返回s
假设某个对象s所指的实例拥有指向其他对象(如动态链表节点)成员变量的情况,在清除该对象值的过程中(即清除该实例占用的空间),就会导致该指针被赋值为0进而不再保留在原来的内存区域中。这将导致原本应释放并回收的空间无法回收从而造成内存泄漏。在最近的一次单元测试中, 我们就遇到了类似的问题, 其中一个问题出现在使用 memset 函数对带有 string 类型字段的结构体实
全部评论 (0)
还没有任何评论哟~
