struct object
{
char* whatever;
}
struct other_object
{
object** points;
int number;
}
void add_to_points(other_object* passer, const struct object* object_ptr)
{
passer->points[passer->number] = object_ptr; //leads to warning
number++;
}
void delete_memory(other_object* passer)
{
int i;
for(i = 0; i < passer->numbers; i++){
free(passer->points[i]);
}
}
struct object* new_object = malloc(sizeof(object));
struct other_object* new_object_2 = malloc(sizeof(other_object));
new_object_2->points = malloc(3*sizeof(object));
add_to_points(new_object_2, new_object);
delete_memory(new_object_2);
所以使用上面的代码,似乎delete_memory实际上是释放对象本身。我知道这可能与我的add_to_points函数有关,但是我不清楚如何更改它以便“points”仅指向对象,但是如果我们删除一个点的成员(例如points [2])或者整个事物,物体本身并没有被破坏。
答案 0 :(得分:0)
您必须使用new_object_2->points
而不是object*
为object
调用malloc。你似乎想要像对象那样想要对象的数组而不是对象数组。
替换
new_object_2->points = malloc(3*sizeof(object));
与
new_object_2->points = malloc(3*sizeof(object*));
答案 1 :(得分:0)
void add_to_points(other_object* passer, struct object* object_ptr)
{
if (passer->number < 3) {
passer->points[passer->number] = object_ptr; //leads to warning
(passer->number)++;
}
}
您在number
中使用了错误的add_to_points
变量。 passer->number
是正确的。也不要忘记在malloc
之后初始化此变量。此外,在将内容写入3
之前,您应首先将其测试为小于passer->points[passer->number]
。警告来自参数列表中的const
。