我正在编写课堂模拟,其中一部分涉及生物的繁殖.我的生物被排列在阵列中,繁殖时我需要增加阵列的大小.因为我对多种生物有多个类别,所以我使用了一个模板:
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而不是重新实现它.