2012-05-16 17 views
0

The code我的動態數組模板類正在做奇怪的事情

我在處理字符串時遇到問題。每當我嘗試一個字符串,我得到一個可愛的小錯誤代碼:

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

它處理INT,雙,和炭就好了。我也嘗試了與我使用(字母表)完全相同的測試字符串作爲char *,並且它也做得很好。它只是在弦上嘔吐,因爲我無法相當理解。我真的不知道下一步該去哪裏。有什麼建議麼?

+2

歡迎來到SO,一對夫婦的指針:1)在你的問題中發佈所有相關的代碼,代碼轉儲的外部鏈接被壓垮。 2)請閱讀[sscee.org](http://sscce.org/)。 –

回答

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將嘗試複製自己的內部數據(這不在那裏),並且會導致訪問衝突。