我正在写为类的模拟,以及它的一部分涉及到生物体的生殖。我的生物都保存在一个数组中,我需要增加数组的大小时,他们重现。因为我有多个类多种生物体中,我使用的模板:

template <class orgType>
void expandarray(orgType* oldarray, int& numitems, int reproductioncount)
{
    orgType *newarray = new orgType[numitems+reproductioncount];

    for (int i=0; i<numitems; i++) {
        newarray[i] = oldarray[i];
    }

    numitems += reproductioncount;

    delete[] oldarray;
    oldarray = newarray;
    newarray = NULL;
}

然而,这个模板似乎在某种程度上破坏我的数据。我可以毫不再现(注释掉到expandarray调用)运行程序很好,但调用这个函数会导致我的程序崩溃。该方案不崩溃期间expandarray功能,但后来访问冲突崩溃上。

我已经写了功能扩展的阵列数百次,我不知道我搞砸了这个时候。有什么公然错在我的功能?它右看看你吗?

编辑:感谢大家的帮助。我无法相信我错过了一些明显。为了应对使用std::vector:我们还没有在课堂上讨论它,并且愚蠢的,因为它似乎,我用我们被教导的方法需要编写代码

有帮助吗?

解决方案

您需要传递oldarray作为参考:orgType *& oldarray。它目前编写方式,该功能将删除呼叫者的阵列,但不会给它的新分配的一个,导致崩溃。

更好的是,使用std::vector代替重新实现它。

其他提示

在C ++标准库已经具有的功能写入到做到这一点。

使用std::vector容器。

看起来,你是oldarray修改该指针指向新阵列,但在这只是一个副本功能记住,并不会影响您在传递的变量,你可能需要一个参考传递给你的指针想要做这种方式。

事实上,性病::向量为您完成此反正

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top