我的程序是通过创建具有新大小的新arr来增加结构数组的大小,然后将旧数组的双指针分配给新数组。在将旧数组分配给新数组之前或之后,我一直在努力释放旧数组的内存。如果我不收费,它会给出正确的结果,否则,它将自动提取并打印出一些垃圾值。请帮助,谢谢。
*不允许重新分配。
use Model1;
class Model2 {
public $virtattr;
public $_virtattr;
public function getVirtattr () {
return (new Model1)->getVirtattr();
}
}
答案 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;