动态堆上分配的总字节数

时间:2015-11-26 12:02:19

标签: c malloc

假设sizeof(int)。 那么,将在动态堆上分配的字节总大小是多少? 你能解释一下原因吗?

#include<stdio.h>
#include<stdlib.h>
#define MAXROW 8
#define MAXCOL 27

int main()
{
    int (*p)[MAXCOL];
    p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
    return0;
} 

3 个答案:

答案 0 :(得分:0)

在您的代码中,

int (*p)[MAXCOL];

与说法相同,将p声明为指向MAXCOLint个数组的指针。

因此,考虑到sizeof(int)是4个字节(32位编译器/平台), 如果成功,则sizeof(*p)为108,MAXROW *sizeof(*p)8 * 108malloc()分配多个字节。

另外,please see this discussion on why not to cast the return value of malloc() and family in C.

答案 1 :(得分:0)

假设&#34; sizeof(int)是&#34;(什么?)...我想你的意思是4。 在第一行中,您将p声明为指向27个整数数组的指针。 在第二行中,您为堆中的内存分配了取消引用p的大小 - 即27个整数乘以8 - 即27 * 4 * 8,因此分配的字节数为864.

答案 2 :(得分:0)

答案应该是MAXROW*MAXCOL*sizeof(int)。无法从显示的代码中确定int的大小。它可以是248 ...甚至是42,几乎都是0

如果您的教师或课程期望432,他们会依赖您未能提供的额外背景。重新阅读你的问题,你写假设sizeof(int)。你需要说出应该准确的假设。

相关问题