gpt4 book ai didi

c++ - 释放 char 数组时发生内存泄漏

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:42 26 4
gpt4 key购买 nike

我有 malloc 一个 char 数组并初始化它:

int i;
int length = 100;
char *arr = (char *) malloc (length * sizeof(char));
for (i = 0; i < length; i++) {
arr[i] = i;
}

然后我将中间字符设置为'\0':

arr[50] = '\0';

在这种情况下,arr 只有 50 个无效长度,而不是 100 个然后我免费使用:

free(arr);

这会导致内存泄漏吗?即操作系统会记录malloc长度还是直接用strlen判断长度?

最佳答案

free 知道分配的内存块的大小。那么,它怎么知道大小呢?这是依赖于实现的,但通常它会在它分配的实际内存块开始之前存储大小。例如,在 Coliru 上,下面的程序打印 113(113 意味着它分配的内存比我们实际要求的多)。

#include <iostream>

int main()
{
char *arr = (char *) malloc (100 * sizeof(char));
std::cout << *((std::size_t*)arr - 1) << std::endl;
}

这已经很过时了,但是正在阅读 A Memory Allocator可能是个好主意。它会让您更好地了解正在发生的事情(请记住,实际实现可能会有所不同)。

关于c++ - 释放 char 数组时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17417076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com