复制阵列并清理
Copying Arrays and cleaning up
我正在尝试将我的数组复制到一个更大的数组中,然后删除旧数组以清理内容。该类有一个int
和一个指针,并重写析构函数以确保它在我可以delete []
时不会删除指针。但我的delete []
上抛出了一个异常.我使用 = new field[1000];
来初始化数组。
我得到"Collections.exe has triggered a breakpoint."
,但断点不是我的。
inline void _resize(unsigned int newTableSize, bool _trimCalled){
if (newTableSize < tableSize && _trimCalled == false) {
_trim();
return;
}
field* newTable = new field[newTableSize];
for (unsigned int x = 0; x < newTableSize; x++)
newTable[x] = table[x];
tableSize = newTableSize;
delete[] table;
table = newTable;
}
inline void _trim(){
// compact the table
// fill in from the end of the table
for (int x = tableSize; !emptyPlaces.empty() ; x--){
if (table[x].used = true){
table[emptyPlaces.top()] = table[x];
emptyPlaces.pop();
}
}
// trim the excess
_resize((unsigned int)(usedFields * 1.1 + 10), true);
template<typename key, typename object> class DictonaryArray {
struct field{
field(){ this->key = 0; this->_object = nullptr; this->used = false; }
field(key _key, object __object){;
key = _key;
_object = new object();
*_object = __object;
this->used = true;
}
~field(){
}
key key;
object* _object;
bool used;
};
table = newtable;;
delete[] table;
看起来很可疑。
也许你想要,
delete[] table;
table = newTable;
删除旧表并为其分配新表的地址。
编辑 1:
也假设tableSize
是旧表的大小
for (unsigned int x = 0; x < newTableSize; x++)
需要
for (unsigned int x = 0; x < tableSize; x++)
因为table[x]
最多只能读取tableSize-1
相关文章:
- 内存C++复制是否将内存地址复制到另一个阵列
- 比strncpy更好地复制字符阵列的部分方法
- 复制到新阵列时出现动态内存分配问题
- 阵列操作,复制最后一个元素
- 问题将信息复制到指针阵列中
- 使用std ::复制复制阵列时获取细分故障
- 如何将 HDC 位图快速复制到三维阵列?
- 从 C 数组进行 STL 阵列,无需复制
- 如何复制包含非原始类型的阵列
- 快速复制数组到阵列
- C 2D char阵列有时会在随机位置复制数据
- C++将 2D 阵列的一部分复制到另一个 2D 阵列,性能
- std ::类似阵列的类复制构造函数
- 复制动态阵列并使用过载的操作员删除原件
- 对于阵列复制,const&的性能更好吗?
- 复制二维阵列C++
- 如何在Cuda中将2D阵列从设备复制到主机
- 当阵列需要复制回主机时,如何避免同步
- 复制阵列并清理
- 将动态分配的阵列复制到更大的阵列,而不会发生内存泄漏