【发布时间】:2016-06-19 20:31:01
【问题描述】:
所以我应该在 C 中实现一个可以包含任何类型对象的集合。如何根据该对象的类型动态分配内存。或者即,我如何找出类型未知的对象的大小,只给一个指向它的 void 指针?
void set_add(set *s, const void *item) {
...
s->items[s->size] = malloc(sizeof(*item) * ??);
...
}
【问题讨论】:
-
如果没有传入大小,你就无法找出以可移植方式指向的对象的大小。
-
也许你的任务并没有说明要维护一个装满你的副本项的集合。只要
const void *指向的任何东西的生命周期都比您的设置长/长,并且身份是基于地址的,您就知道大小;它是const void*的大小。如果作业确实需要复制,您需要知道大小。没有什么可以逃避的。 -
您的
set *s作为参数传递是否保证在函数调用之前包含正确的s->size?
标签: c pointers memory-management malloc