我在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字节)。然后为什么这个警告以及如何解决它。