【问题标题】:Templated Insert at End Function模板化插入结束函数
【发布时间】:2013-01-28 14:28:17
【问题描述】:

我正在尝试创建一个模板化函数,该函数将在数组末尾插入一个值,但是无论我尝试做什么,我都会遇到段错误。任何建议将不胜感激。

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++;
   }
}

【问题讨论】:

  • m_sizem_maxm_data 初始化为什么?

标签: c++ class function templates insert


【解决方案1】:

鉴于您已正确初始化m_datam_sizem_max,您发布的代码有效。事实上,我创建了一个测试版本here,它运行没有错误。简单地说,我把它放在一个结构中,这只是为了让我更容易写。此外,我将您的循环变量更改为 size_t,以避免在比较有符号和无符号值时出现警告。

鉴于此,最可能的问题是您没有分配任何初始内存。 m_size 应该被初始化为零并且m_max 需要大于零(并且匹配分配的内存量),否则新计算的m_max 将是2*m_max,它仍然是0。

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2012-01-14
    • 2016-05-15
    相关资源
    最近更新 更多