【发布时间】:2010-04-11 20:13:00
【问题描述】:
我正在为班级编写模拟,其中一部分涉及生物的繁殖。我的生物体保存在一个数组中,当它们繁殖时我需要增加数组的大小。因为我有多个生物的多个类,所以我使用了一个模板:
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:我们还没有在课堂上讨论过,虽然看起来很傻,但我需要使用我们学过的方法编写代码。
【问题讨论】:
-
你为什么不用
std::vector? -
@dxq:欢迎来到 StackOverflow。以后,如果您对作业有任何疑问,请在其中添加
[homework]标签。它可以帮助您在允许使用的语言的有限子集中获得问题的最佳答案。 :-) -
在
vector之前教手动内存管理?完全错误的方式。这很糟糕(但很典型)。另一方面,要求解决方案仅限于已经教授的工具是合理的。 -
需要注意的一点 - 如果 orgType 包含指向其他 orgType 值的指针(例如,如果您有指向父生物体的指针),那么复制操作很可能必须复杂得多比您使用的相对简单的复制分配操作。
-
如果你已经了解了什么是类,我强烈建议你编写自己的
vector包装器并使用它。然后问你的老师为什么他让你浪费时间。
标签: c++ templates arrays expand