Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 动态堆上分配的总字节数_C_Malloc - Fatal编程技术网

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 of
int
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