gpt4 book ai didi

c - malloc() 怪异——总是分配 8 个字节?

转载 作者:行者123 更新时间:2023-12-02 04:15:46 26 4
gpt4 key购买 nike

我遇到了一些我无法理解的 malloc 行为。

例如,为结构分配内存效果很好,即:

typedef struct my_struct {
char buffer[4096];
struct my_struct *next;
} MY_STRUCT;

...

MY_STRUCT *ptr = (MY_STRUCT *)malloc(sizeof(struct my_struct));
printf("malloc() gave us %lu bytes\n", sizeof(*ptr));
printf("My structure's first member is %lu in length\n", sizeof(ptr->buffer));
free(ptr);

...

返回

malloc() gave us 4104 bytes
My structure's first member is 4096 in length

...完全符合预期。现在,当我尝试为字符串动态分配缓冲区时:

int bufsize = 4096;
char *buffer = (char *)malloc(sizeof(char)*bufsize);
printf("bufsize: %d\n", bufsize);
printf("Allocated buffer size: %lu\n", sizeof(*buffer));
free(buffer);

...返回

bufsize: 4096
Allocated buffer size: 8

现在,我可以将 malloc() 调用硬编码为 4096、1、4,任何东西......它总是出现 8。

我在这里犯了什么错误?

最佳答案

sizeof 告诉您编译器认为某物的大小是多少。

如果 ptrMY_STRUCT*,则 sizeof(*ptr) 将始终与 sizeof(MY_STRUCT) 相同。即使 ptr 指向 NULL,或指向 MY_STRUCT 数组,或指向已释放的内存,等等,情况也是如此。

sizeof 不能用于告诉您使用 malloc 分配的内存块的大小。

关于c - malloc() 怪异——总是分配 8 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834570/

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