gpt4 book ai didi

c++ - 复制数组并清理

转载 作者:行者123 更新时间:2023-11-28 07:19:54 25 4
gpt4 key购买 nike

我正在尝试将我的数组复制到一个更大的数组中,然后删除旧数组以进行清理。该类有一个 int 和一个指针,并重写析构函数以确保它不会在我可以 delete [] 时删除指针。但是我的 delete [] 抛出了异常。我使用 = new field[1000]; 来初始化数组。

我收到 “Collections.exe 已触发断点。”,但断点不是我的。

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++ - 复制数组并清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19658320/

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