gpt4 book ai didi

c - malloc后如何获取内存块长度?

转载 作者:太空狗 更新时间:2023-10-29 16:32:49 25 4
gpt4 key购买 nike

我认为我无法像 Java 中的简单 .length 函数那样检索分配的内存块的长度。但是,我现在知道当 malloc() 分配 block 时,它会分配额外的字节来保存包含 block 大小的整数。这个整数位于 block 的开头;实际返回给调用者的地址指向刚好超过这个长度值的位置。问题是,我无法访问该地址来检索 block 长度。

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *str;
str = (char*) malloc(sizeof(char)*1000);
int *length;
length = str-4; /*because on 32 bit system, an int is 4 bytes long*/
printf("Length of str:%d\n", *length);
free(str);
}

**编辑:我终于做到了。问题是,它一直给出 0 作为长度而不是我系统上的大小是因为我的 Ubuntu 是 64 位的。我将 str-4 更改为 str-8,现在可以使用了。

如果我将大小更改为 2000,它会生成 2017 作为长度。但是,当我更改为 3000 时,它会显示 3009。我使用的是 GCC。

最佳答案

您不必自己跟踪它!

size_t malloc_usable_size (void *ptr);

但它返回分配的内存块的实际大小!不是您传递给 malloc 的大小!

关于c - malloc后如何获取内存块长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451104/

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