我遇到了一些我不理解 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)
现在,我可以硬编码 …