gpt4 book ai didi

c++ - 复制构造函数和 getter 错误(增变函数)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:42 26 4
gpt4 key购买 nike

所以我创建了一个名为 WordFrequency 的类,它存储一个字符串单词和一个整数频率作为私有(private)成员变量。一个 HashTable 函数,在哈希表中包含 WordFrequency** 、 hashsize 、 currentitems 。

在使用复制构造函数时,我总是遇到错误 -线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)当在复制构造函数中调用时,它将我重定向到 WordFrequency 类的 getter 函数。我无法弄清楚为什么会这样。

复制构造函数。

Hashtable:: Hashtable(const Hashtable &hash){

WordFrequency** temp = new WordFrequency* [hash.hashSize];
this->arr = temp;
for (int i = 0 ; i < hash.hashSize ; i++) {
if (hash.arr[i] == NULL){ //pointer in hashstable is null
continue;
}
//bucket is not empty
if(this->search(this->arr[i]->getWord()) != 0 ){ //if same string already found in this hashtable
this->arr[i]->increment(); // incrtement the frequency
continue;
}

//else the string doest even exist in the hashtable.

WordFrequency x ((hash.arr[i])->getWord()); //deep copying the word from the parameter hash
temp[i] = &x; //pointing the hash table to the new the object

}
this->hashSize = hash.hashSize;
this->currentItems = hash.currentItems;
}

wordfrequency类中的getter函数。

string WordFrequency:: getWord()  const {
return this->word;
}

虽然getter函数看起来很简单,但我不知道为什么会报错。

我还包括我的析构函数原因,这可能是问题所在。

Hashtable::  ~Hashtable() {
for (int i = 0 ; i < this->hashSize ; i++){
delete this->arr[i];
}
delete [] this->arr;
this->hashSize = 0;
this->currentItems = 0;

}

输出运算符——

ostream&  operator<< (ostream &out, const Hashtable &h){
out << "Hashtable with size - " << h.hashSize << "and no of elements - " << h.currentItems << endl;

for (int i = 0 ; i < h.hashSize ; i++){
if (h.arr[i] == NULL){
out << "0";
continue;
}
else {
out << ((h.arr[i])->getWord()); //bad access
}
}


out << endl;
return out;

}

最佳答案

在 HashTable 构造函数的 for 循环中,您正在存储堆栈分配对象的指针:

WordFrequency x ((hash.arr[i])->getWord());
temp[i] = &x;

该内存在 for 循环范围之外被回收,当您稍后尝试访问该对象时,这会导致“错误访问”。您应该改用 new 对象:

temp[i] = new WordFrequency((hash.arr[i])->getWord()); 

关于c++ - 复制构造函数和 getter 错误(增变函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080724/

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