我的动态数组模板类正在做奇怪的事情

My Dynamic Array template class is doing weird things

本文关键字:数组 动态 我的      更新时间:2023-10-16

代码

我在处理字符串时遇到问题。每当我尝试一个字符串时,我都会得到一个可爱的小错误代码:

在 arraytest .exe 中0x77e815de时未处理的异常: 0xC0000005:访问冲突读取位置0xabababab。

它可以很好地处理 int、double 和 char。我还尝试了与我使用的完全相同的测试字符串(字母表)作为字符*,它也做得很好。它只是在弦上呕吐,原因我无法完全理解。我真的不知道接下来该去哪里。有什么建议吗?

您在push_back中的重新分配代码有问题

template<class type>
void DynamicArray<type>::push_back(type newValue)
{
        ++_size;   // <=== **
        if (_size > _capacity) // If size larger than capacity
        {
                _capacity *= CAPACITY_MULT; // double capacity
                type* tempArray = new type[_capacity];// Create temporary array with new capacity
                // Copy array values into temporary array
                for (int i = 0; i < _size; i++)    // <=== **
                {
                        tempArray[i] = dynArray[i];
                }
                // Delete dynArray
                delete[] dynArray;
                // Insert new value at end of temporary array
                // Set dynArray to temporary array
                dynArray = tempArray;
        }
        dynArray[_size - 1] = newValue;
}

首先增加当前容器的大小,然后再检查是否有空间容纳新元素。然后,在将旧值复制到新数组时使用新大小。

这似乎适用于基元类型,但std::string会尝试复制自己的内部数据(不存在)并导致访问冲突。