我正在尝试创建一个模板化的函数,它将在数组的末尾插入一个值,但是无论我尝试做什么,我都会遇到seg错误。任何建议都将不胜感激。
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++;
}
}发布于 2013-02-13 14:54:22
假设您已经正确地初始化了m_data、m_size和m_max,那么您发布的代码就可以工作了。实际上,我创建了一个测试版本here,它运行时没有错误。简单地说,我把它放在一个结构中,这只是为了让我更容易写。此外,我将循环变量更改为size_t,以避免关于比较有符号和无符号值的警告。
鉴于此,最有可能的问题是您没有分配任何初始内存。m_size应该初始化为零,并且m_max需要大于零(并与分配的内存量匹配),否则新计算的m_max将是2*m_max,它仍然是0。
https://stackoverflow.com/questions/14846841
复制相似问题