我遇到了一些我对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。
我在这里弄错了什么?
答案 0 :(得分:4)
sizeof
告诉你编译器认为某些东西的大小是什么。
如果ptr
是MY_STRUCT*
,则sizeof(*ptr)
将始终与sizeof(MY_STRUCT)
相同。如果ptr指向NULL,或者指向MY_STRUCT
s的数组,或者已经释放的内存,那么甚至等等。
sizeof
不能用于告诉您使用malloc
分配的内存块的大小。