C在64位系统上将void **转换为char **

时间:2015-01-07 00:26:47

标签: c pointers 64-bit

我在64位系统上收到如下警告:

当我拨打以下电话时

warning: cast to pointer from integer of different size

char** str;
str = (char **)Calloc2D(nObj + 1, 20, sizeof(char))

以下是分配2D数组的实际功能:

void **Calloc2D(size_t nobj1, size_t nobj2, size_t size) 
{
  void **p1;
  void *p2;
  size_t iobj1;
  char *c2;

  /* Allocate memory for one big array */

  p2 = calloc((nobj1 * nobj2), size);
  if (p2 == NULL) return NULL;

  /* Allocate memory for the first dimension */

  p1 = (void **) calloc(nobj1, sizeof(void *));
  if (p1 == NULL) {
    free(p2);
    return NULL;
  }

  /* Set up the pointers for the first dimesion */

  c2 = (char *) p2;
  for (iobj1 = 0; iobj1 < nobj1; iobj1++) {
    p1[iobj1] = (void *) c2;
    c2 += (nobj2 * size);
  }

  /* Return a pointer to the 2-dimensional array */

  return p1;
}

我不明白为什么我得到上述警告以为我的功能已被完全声明为返回void **。我的理解是,在64位系统void**char**应该具有相同的大小(8字节)。然后为什么这个警告以及如何解决它。

0 个答案:

没有答案