在动态堆上分配的总字节数

Total bytes allocated on dynamic heap

假设 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;
} 

在您的代码中,

int (*p)[MAXCOL];

等价于说,将 p 声明为指向 MAXCOLint 的数组的指针。

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

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

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

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

的东西

如果您的老师或课程期望 432,他们依赖于您未能提供的额外上下文。重读你的问题,你写 assume sizeof(int)。你需要准确地说出应该假设什么。