【发布时间】:2018-09-12 02:17:40
【问题描述】:
我试图了解如何使用 malloc 在堆上分配内存,并遇到以下观察结果,但无法理解其背后的原因。如果有人能解释一下就太好了。
首先看一下我写的代码:
#include<stdio.h>
#include<stdlib.h>
void print_int_heap(unsigned int *ptr, int len)
{
printf("PREV_SIZE: [%08x] SIZE: [%08x] MEM: [%08x] for INT malloc(%d)\n", *(ptr-2), *(ptr-1), ptr, len);
}
void print_char_heap(char *ptr, int len)
{
printf("PREV_SIZE: [%08x] SIZE: [%08x] MEM: [%08x] for CHAR malloc(%d)\n", *(ptr-2), *(ptr-1), ptr, len);
}
int main() {
unsigned int *ptr1 = malloc(20);
print_int_heap(ptr1, 20);
char *ptr2 = malloc(20)
print_char_heap(ptr2, 20);
return 0;
}
我为上述程序得到的输出是:
PREV_SIZE: [0x00000000] SIZE: [0x00000019] MEM: [0x0804b008] for INT malloc(20)
PREV_SIZE: [0x00000000] SIZE: [0x00000000] MEM: [0x0804b020] for INT malloc(20)
我可以理解 int malloc 的输出,但我不明白为什么 char malloc 的块大小的值为 0?
【问题讨论】:
标签: c memory-management heap-memory