c-在malloc中使用sizeof



我试图将矩阵的创建包装成一个函数,但在理解从书中提取的以下代码片段时遇到了问题:

  // An error checked malloc() wrapper function
  void *ec_malloc(unsigned int size) {
     void *ptr;
     ptr = malloc(size);
     if(ptr == NULL)
        fatal("in ec_malloc() on memory allocation");
     return ptr;
  }

我已经检查了这个问题:

我是否投射malloc的结果?

现在我没有必要公布结果了。但我不明白的是,在没有sizeof运算符的情况下使用malloc(size)。例如,为了创建一个矩阵,比如int **matrix,我也创建了这个函数:

  // An error checked malloc() wrapper function
  void **double_ec_malloc(unsigned int size) {
     void **ptr;
     ptr = malloc(size);
     if(ptr == NULL)
        fatal("in ec_malloc() on memory allocation");
     return ptr;
  }

然后我做:

  int **matrixA = double_ec_malloc(size);
  int i = 0;
  for (i = 0; i < size; i++){
    matrixA[i] = ec_malloc(size);

mallocman说:

malloc()函数分配大小字节,并返回一个指向已分配内存的指针。

size4,则在ptr = malloc(size)中我分配4个字节,但如果矩阵类型为int。我不需要sizeof int * 4吗?因为现在我认为我没有为一个整数矩阵分配足够的内存。

由于ec_malloc()不接受数据类型参数,因此它假设您将自己执行sizeof(datatype) * size。因此,参数unsigned int size应该以字节为单位。

请注意,这正是malloc()本身的行为方式。

malloc函数(和您的ec_malloc)都分配一个长度为size字节的线性字节区域。

sizeof只是返回一个int,它与malloc没有任何关系(除了它经常与malloc一起使用)。

32位整数的长度为4字节。CCD_ 22返回4。如果你想要4个int的空间,你会说malloc( sizeof(int) * 4 )

相关内容

  • 没有找到相关文章

最新更新