C 动态堆上分配的总字节数
假设C 动态堆上分配的总字节数,c,malloc,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; } #包括 #包括 #定义
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;
}
#包括
#包括
#定义MAXROW 8
#定义MAXCOL 27
int main()
{
int(*p)[MAXCOL];
p=(int(*)[MAXCOL])malloc(MAXROW*sizeof(*p));
返回0;
}
在您的代码中
int (*p)[MAXCOL];
也就是说,将p
声明为指向MAXCOL
number ofint
s数组的指针
因此,考虑到sizeof(int)
是4个字节(32位编译器/平台),
sizeof(*p)
为108,MAXROW*sizeof(*p)
为8*108
,如果成功,则分配那么多字节
另外,.假设“sizeof(int)是”(什么?)。。。我猜你的意思是4。
在第一行中,您将p声明为指向27个整数数组的指针。
在第二行中,您在堆中为解引用的p的大小分配内存,即27个整数乘以8,即27*4*8,因此分配的字节数为864。答案应该是
MAXROW*MAXCOL*sizeof(int)
。无法根据显示的代码确定int
的大小。它可以是2
,4
,8
。。。甚至是42
,几乎任何大于0
的东西
如果您的老师或课程要求提供
432
,他们会依赖您未能提供的额外上下文。重新阅读你的问题,你写下假设sizeof(int)。你需要准确地说出应该假设的内容。你认为代码做什么?好吧,我不在乎它做什么,只是一个测验中的问题……好吧,如果你不在乎,我们就不需要回答了。什么?你是怎么得出这个结论的?除此之外,我不需要知道它做了什么。它只是分配内存,就是这样,问题是堆上分配了多少字节…我投票结束这个问题,因为…@user3741208当你试图将MAXROW*sizeof(*p)
打印为整数时发生了什么?Lundin,它会打印864@user3741208那好吧<代码>8*(27*4)@user3741208好吧,我的错,我把MAXROW
和MAXCOL
搞混了。。。嗯,我猜他们的电脑有奇怪的CPU,无论如何,谢谢大家!对不起,我想我说对了。它应该是sizeof(int)=4
然后MAXROW*MAXCOL*sizeof(int)
=27*8*4
=864
。