我遇到处理字符串的问题。每当我尝试一个字符串时,我会得到一个可爱的小错误代码:
Unhandled exception at 0x77e815de in arraytest.exe: 0xC0000005: Access violation reading location 0xabababab.
它处理int,double和char就好了。我也尝试了我使用的完全相同的测试字符串(字母表)作为char *,它也做得很好。它只是在字符串上呕吐,原因是我无法理解。我真的不知道接下来要去哪里。有什么建议吗?
答案 0 :(得分:3)
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
会尝试复制自己的内部数据(不存在)并且可能会导致访问冲突。