gpt4 book ai didi

c - 释放分配的数组内存(与普通 var 相比?)

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:50 26 4
gpt4 key购买 nike

我知道当我们为 var 分配内存时,我们需要使用指向 var 的指针调用 free() func 来释放空间(并且不要让指针悬空)。

但是当我们为变量数组分配内存时,我们要做什么呢?我们应该去释放数组 [0..n] 的每个成员,还是仅仅释放第一个成员的指针就足够了?

long *array_p; 
size_t elements_num = 5

array_p = malloc(elements_num*sizeof(long));

选项#1:

free(array_p);
array_p=NULL;

选项#2:

for (i=0; i<array_len-1; ++i)
{
free(array_p+i);
array_p+i= NULL;
}

最佳答案

操作系统通常是这样工作的:每个内存分配都会在内存块中留下痕迹——除了你的实际/真实数据大小(包括一些额外的信息,比如分配的内存长度,下一个可用内存地址为即将到来的分配等)。具体来说,

  • 当您分配40 个字符 的 block 时,操作系统将分配 56 个字节 — 16 个字节是为了跟踪分配的内存长度,下一个可用(空闲)内存地址等和 40 个字节用于实际数据。

  • 当您分配一个由 40 个整数 组成的 block 时,然而这次,操作系统将分配 176 个字节——同样,16 个字节是为了跟踪分配的内存长度,下一个可用(空闲)内存地址等,以及 (4 × 40 =) 160 字节用于实际数据。

因此,当您释放数据数组时,操作系统将已经知道要释放的内存的起始地址和结束地址。

this 的前 20 分钟视频非常详细地解释了该过程。

关于c - 释放分配的数组内存(与普通 var 相比?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466115/

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