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

use*_*107 2 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);

...
Run Code Online (Sandbox Code Playgroud)

退货

malloc() gave us 4104 bytes
My structure's first member is 4096 in length
Run Code Online (Sandbox Code Playgroud)

……正如预期的那样。现在,当我尝试为字符串动态分配缓冲区时:

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);
Run Code Online (Sandbox Code Playgroud)

...返回

bufsize: 4096
Allocated buffer size: 8
Run Code Online (Sandbox Code Playgroud)

现在,我可以硬编码malloc()对 4096、1、4的调用,任何真的......它总是出现 8。

我在这里出了什么问题?

use*_*751 5

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

如果ptrMY_STRUCT*sizeof(*ptr)则将始终与 相同sizeof(MY_STRUCT)。这是真的,即使如果ptr指向NULL,或数组MY_STRUCTS,或记忆体的角色已经被释放,或等等。

sizeof不能用来告诉你分配的内存块的大小malloc