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。
我在这里出了什么问题?
sizeof 告诉您编译器认为某物的大小是多少。
如果ptr是MY_STRUCT*,sizeof(*ptr)则将始终与 相同sizeof(MY_STRUCT)。这是真的,即使如果ptr指向NULL,或数组MY_STRUCTS,或记忆体的角色已经被释放,或等等。
sizeof不能用来告诉你分配的内存块的大小malloc。
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |