在这种情况下,如何正确释放双指针的内存?

时间:2018-11-07 14:29:08

标签: c memory-leaks malloc free dynamic-memory-allocation

我的程序是通过创建具有新大小的新arr来增加结构数组的大小,然后将旧数组的双指针分配给新数组。在将旧数组分配给新数组之前或之后,我一直在努力释放旧数组的内存。如果我不收费,它会给出正确的结果,否则,它将自动提取并打印出一些垃圾值。请帮助,谢谢。

*不允许重新分配。

use Model1;

class Model2 {
    public $virtattr;
    public $_virtattr;

    public function getVirtattr () {
        return (new Model1)->getVirtattr();
    }
}

1 个答案:

答案 0 :(得分:4)

这里有两个问题。

首先,您只复制一个单个结构,而不是整个数组:

memcpy(newCarArray, carArray, sizeof(struct car));

在这里,您要复制sizeof(struct car)个字节,这对于一个结构来说就足够了。您还没有复制正确的内容,因为carArray是指针到指针的指针。您需要乘以原始大小才能复制整个数组,并且需要取消引用carArray

memcpy(newCarArray, *carArray, (*cap / 2) * sizeof(struct car));

另一个问题在这里:

carArray = &newCarArray;

在这里,您只在修改参数carArray,因此对它的更改不会反映在调用者中。您需要像执行car一样取消引用它:

*carArray = newCarArray;