在C中扩展数组的问题

我正在编写课堂模拟,其中一部分涉及生物的繁殖.我的生物被排列在阵列中,繁殖时我需要增加阵列的大小.因为我对多种生物有多个类别,所以我使用了一个模板:

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而不是重新实现它.

上一篇:如何在javascript中自动扩展html select元素


下一篇:android-单击列表元素时展开列表视图