我是哈希的新手,所以我想创建一个包含字符串数组的哈希表。它在类本身中工作,但是当我尝试在类之外使用字符串数组时,它崩溃了。 我的构造函数或我认为的数组有些奇怪。
我从main.cpp中放入代码,并将其粘贴到构造函数中,但它没有任何问题。控制台可以显示我的阵列。但是当我尝试在main.cpp中使用getArray函数时,它就会崩溃。
hashtable.h
class hashtable
{
public:
hashtable();
void remove(string);
int hashfunction(string str);
string* getArray();
private:
int table_size;
string* T;
};
hashtable.cpp
hashtable::hashtable()
{
int table_size = 10;
elemts_in_array = 0;
string array[10];
// Im adding some elements to test it. In final Version i will delete the next two lines.
array[0]="start";
array[9]="end";
T = array;
// now I am testing if my function string* getArray() is working, and it's working when i dont use it in main.cpp
string* arraytest = getArray();
for (int i=0; i< 10;i++)
{
cout << i << " - " << arraytest[i]<< endl;
}
}
/////////// getArray function
string* hashtable::getArray()
{
return T;
}
main.cpp
int main()
{
hashtable table;
string* array = table.getArray();
for (int i=0; i< 10;i++)
{
cout << i << " - " << array[i]<< endl;
}
return 1;
}
当我只创建一个称为哈希表的对象时,它的工作没有任何问题,但是当我创建一个对象时,我想将数组通过我的getArray函数传递给main.cpp,它崩溃了,我真的不知道为什么。 / p>
答案 0 :(得分:0)
array
在hashtable
的构造函数的末尾超出范围,而使T
指向无效的内存。如果希望T
指向的数组在hashtable
的构造函数范围之外继续存在,则需要动态分配。或者更好的方法是使用std::vector<std::string>
:
class hashtable
{
public:
hashtable()
: T{10}
{
T[0] = "start";
T[T.size() - 1] = "end";
for (int i = 0; i < T.size(); ++i)
{
std::cout << i << " - " << T[i] << '\n';
}
}
std::vector<std::string>& getArray()
{
return T;
}
void remove(std::string);
int hashfunction(std::string str);
private:
std::vector<std::string> T;
};
int main()
{
hashtable table;
std::vector<std::string>& array = table.getArray();
for (int i = 0; i < array.size(); ++i)
{
std::cout << i << " - " << array[i] << '\n';
}
}