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



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

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

在您的代码中,

int (*p)[MAXCOL];

相当于声明p为指向int s的MAXCOL数量的数组的指针。

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

此外,请参阅关于为什么不在C中投射malloc()和族的返回值的讨论。。

答案应该是MAXROW*MAXCOL*sizeof(int)int的大小无法从所示代码中确定。它可以是248。。。或者甚至42,几乎任何大于0的东西。

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

相关内容

  • 没有找到相关文章

最新更新