2013-02-13 48 views
0

我試圖創建將在數組的末尾插入值的模板函數,但我一直運行到賽格故障無論什麼我嘗試做。任何建議將不勝感激。模板化插入在端功能

template <typename T> 
void ArrayList<T>::insert_back(const T& x) 
{ 
    if(m_size == m_max) 
    { 
     m_max = m_max*2; //resize array 
     T* P = new T[m_max]; 
     for(int y = 0; y < m_size; y++) //copying array 
     { 
     P[y] = m_data[y]; 
     } 
     delete[] m_data; //copy done delete 
     m_data = P; 
     P[m_size] = x; //gdb segfault -- caused by accessing P[m_size] 
     m_size ++; 
    } 
    else // no resizing 
    { 
    m_data[m_size] = x; 
    m_size++; 
    } 
} 
+1

什麼是'm_size','m_max'和'm_data'初始化爲? – JaredC 2013-02-13 05:31:31

回答

0

您發佈的作品,因爲你已經正確初始化m_datam_sizem_max代碼。實際上,我創建了一個測試版本here,它運行時沒有錯誤。簡單地說,我把它放在一個結構體中,這只是爲了讓我更容易寫。此外,我將您的循環變量更改爲size_t,以避免比較有符號值和無符號值的警告。

鑑於此,最有可能的問題是,你沒有任何分配的初始內存。 m_size應該初始化爲零,並m_max需要大於零(和匹配所分配的存儲器的量),否則新計算m_max2*m_max這仍然是0。