malloc()奇怪 - 总是分配8个字节?

时间:2015-11-20 19:26:48

标签: c memory-management

我遇到了一些我对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。

我在这里弄错了什么?

1 个答案:

答案 0 :(得分:4)

sizeof告诉你编译器认为某些东西的大小是什么。

如果ptrMY_STRUCT*,则sizeof(*ptr)将始终与sizeof(MY_STRUCT)相同。如果ptr指向NULL,或者指向MY_STRUCT s的数组,或者已经释放的内存,那么甚至等等。

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