c++ - 我的动态数组模板类在做奇怪的事情

标签 c++ string class templates memory

The code

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

Unhandled exception at 0x77e815de in arraytest.exe: 0xC0000005: 
Access violation reading location 0xabababab.

它可以很好地处理 int、double 和 char。我还尝试了与我使用的(字母表)完全相同的测试字符串作为 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 将尝试复制其自己的内部数据(不存在)并可能导致访问冲突。

关于c++ - 我的动态数组模板类在做奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612727/

相关文章:

c++ - move 语义和引用语义

JavaScript,无字符串

python - 我需要帮助修复 __str__ 方法。不返回任何东西

python - 与它们的等效函数相比,python 类慢了多少?

c++ - 有没有办法 decltype 不可调用函数的结果?

c++ - 为什么我可以在 map 中使用 push_back 但不能在 set 中使用 back_inserter?

c++ - openGL 3 问题 : undefined reference to _glapi_tls_Dispatch

java - 为什么 $ 在 split 方法中不起作用?

javascript - ESLint 双引号中的双引号

class - Scala 类/对象初始化中的奇怪行为