【发布时间】:2015-04-15 04:54:35
【问题描述】:
我正在尝试交换两个 void 指针指向的内存。我收到一个错误,因为我无法对 void 或 pa 或 pb 元素的大小执行 sizeof(因为您无法取消引用 void 指针)。问题是我无法确定 pa 和 pb 在运行时将是什么数据类型(这应该交换作为参数发送的任何数据类型)。我将如何确定,以便我可以正确使用 malloc?这是我的代码:
void SwapObjects(void *pa, void *pb, size_t size)
{
void *pc;
if ((pc = (malloc(size * sizeof(pa)) == NULL))) //this is wrong {
printf("Cannot allocate memory");
return;
}
memcpy(pc, pa, size); //runtime error here
memcpy(pa, pb, size);
memcpy(pb, pc, size);
}
【问题讨论】:
-
您可能应该使用“size”参数而不是“size * sizeof(pa)”。
-
你得到什么错误,因为
sizeof(void)没有任何意义,但sizeof(pa) == sizeof(void *)确实有意义。您拥有的代码按原样分配了比需要更多的内存,但除此之外它应该可以工作。
标签: c dynamic-memory-allocation