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


#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 中分配的字节?

谢谢。

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

因此,您提供的malloc呼叫将分配MAXROW * MAXCOL * sizeof(int)字节。

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

p 是指向长度MAXCOLint数组的指针。所以sizeof(*p)是长度MAXCOLint数组的大小。因此MAXROW *sizeof(*p)等于MAXROW*MAXCOL*sizeof(int)

不需要强制转换 malloc 的返回值,因为malloc返回void*。作为一般规则,在 C 代码中,不应强制转换 malloc 的返回值。

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

相关内容

  • 没有找到相关文章

最新更新