【发布时间】:2017-08-17 10:36:38
【问题描述】:
int* ptr;
ptr=(int*)malloc(sizeof(int)); //(A)
ptr=(int*)malloc(5*sizeof(int)); //(B)
在 (A) 行,将动态创建一个 4 字节的块。现在这很好。但我的问题是在 B 行,它会创建一个 20(5*4) 字节块吗?还是 5 个大小为 4 字节的单独块?如果它创建一个单独的块,那么它们会是连续的吗? ptr=(int*)malloc(5*sizeof(int)); and ptr=(int*)calloc(5,sizeof(int)); 是否等效?
【问题讨论】:
-
创建一个这样的函数:
void foo(int x) { printf("%d\n", x); },现在调用它:foo(5*sizeof(int));。它打印20还是打印5*sizeof(int)?为什么?这些信息足以让您自己回答这个问题吗? malloc 怎么知道8*sizeof(int8_t)、4*sizeof(int16_t)、2*sizeof(int32_t)和1*sizeof(int64_t)之间的区别? -
不要强制返回 malloc。
标签: c