gpt4 book ai didi

c++ - 错误免费(): invalid next size (fast): 0x08912058

转载 作者:行者123 更新时间:2023-11-30 00:35:47 24 4
gpt4 key购买 nike

作为练习的一部分,我正在修改代表创建数组的不同方式的此类:

template<class T>
class Array
{
public:

Array(int size, T defaultvalue) : _size(size)
{
_arr = new T[_size] ;
_def = defaultvalue;
}


Array(const Array& other) : _size(other._size)
{
_arr = new T[other._size] ;
// Copy elements
for (int i=0 ; i<_size ; i++)
{
_arr[i] = other._arr[i] ;
}
}

~Array()
{
delete[] _arr ;
}


Array& operator=(const Array& other)
{
if (&other==this) return *this ;
if (_size != other._size)
{
resize(other._size) ;
}
for (int i=0 ; i<_size ; i++)
{
_arr[i] = other._arr[i] ;
}
return *this ;
}

T& operator[](int index)
{
if (index>_size)
{
int prevsize = _size;
resize(index);
for (int i = prevsize+1; i<=index; i++)
{
_arr[i] = _def;
}
}
return _arr[index] ;
}

const T& operator[](int index) const
{
if (index>_size)
{
int prevsize = _size;
resize(index);
for (int i = prevsize+1; i<=index; i++)
{
_arr[i] = _def;
}
}
return _arr[index] ;
}

int size() const { return _size;}

T defval() const { return _def;}

void resize(int newSize)
{
// Allocate new array
T* newArr = new T[newSize] ;
// Copy elements
for (int i=0 ; i<_size ; i++)
{
newArr[i] = _arr[i] ;
}
// Delete old array and install new one
delete[] _arr ;
_size = newSize ;
_arr = newArr ;
}


private:
int _size ;
T* _arr ;
T _def;
} ;

现在这适用于整数数组,但它给了我

*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x08912058 ***

When I do, for instance:

const char* one = new char[3];
one = "abc";
Array<const char*> b(2, one);

这应该创建一个长度为 2 的数组,并且每当我访问任何索引 > 2 的元素时,它都应该返回字符串“abc”。当我访问这样的元素时,数组返回它应该返回的内容,但我得到了上述错误。错误后跟回溯。

最佳答案

你的 resize 函数会调整到你给它的大小(即 index),但是你随后将数组设置为(包括)index。这是一个无效索引 - 您的数组从 0index-1

我说的是那些台词:

resize(index);
for (int i = prevsize+1; i<=index; i++)

所以你需要用index+1调用resize来解决这个问题。

还有:

const char* one = new char[3];
one = "abc";

这只是内存泄漏(您分配了一个新缓冲区,然后立即将 one 设置为 "abc",这是一个不同的指针)。

关于c++ - 错误免费(): invalid next size (fast): 0x08912058,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com