我正在制作一个包含模板和类的动态数组.
这是我遇到问题的代码:
templateclass GArray { GType* array_type = nullptr; int size = 0; public: GArray(GType Size) { size = Size; array_type = new GType[size]; for (int i = 0; i < size; i++) array_type[i] = NULL; } void Push(GType Item) { size++; GType* temp = new GType[size]; for (int i = 0; i < size-1; i++) temp[i] = array_type[i]; temp[size] = Item; delete[] array_type; array_type = temp; temp = nullptr; } GType& operator[] (int Index) { if (Index >= 0 && Index < size) return array_type[Index]; } }; int main() { GArray arr(2); arr[0] = 10; arr[1] = 20; arr.Push(30); // print array for (int i = 0; i < arr.Size(); i++) cout << arr[i] << endl; return 0; }
在main()中,当我打印整个数组值时,最后一个(应该是30)是一个未定义的值(如-842150451).
通过几个测试,我可以说INSIDE的Push()函数,array_type指针改变了.当我回到main()时,它就像array_type没有改变,它和以前一样.
错误的原因是
temp[size] = Item
是错的.它应该被替换为
temp[size-1] = Item