在C中使用malloc调用分配的字节数

时间:2013-07-29 12:01:15

标签: c malloc byte

#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 23
int main(){
    int (*p)[MAXCOL];
    p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
    return 0;
}

我需要知道将为以下代码分配多少字节(对于此p)。 另外,如果大小不同,malloc会在malloc之前添加/释放在malloc中分配的字节吗?

感谢。

3 个答案:

答案 0 :(得分:1)

p是指向长度为int的{​​{1}}数组的指针。因此,MAXCOL是长度为sizeof(*p)的{​​{1}}数组的大小。因此int等于MAXCOL

由于MAXROW *sizeof(*p)返回MAXROW*MAXCOL*sizeof(int),因此不需要转换malloc的返回值。作为一般规则,在C代码中,您不应该转换malloc的返回值。

答案 1 :(得分:1)

sizeof(*p)MAXCOL int s或MAXCOL * sizeof(int)数组的大小。

因此,您提出的malloc来电将分配MAXROW * MAXCOL * sizeof(int)字节。

关于演员:它不会影响malloc调用分配的字节数。事实上,它完全没有必要(在这种情况下没有任何影响),最好省略。

答案 2 :(得分:0)

我认为这取决于您的体系结构,如果整数是32位或64位。然后正如大卫所说,MAXROW是这个大小的倍。