对我而言,它似乎应该如此简单,但我只是觉得我错过了一些东西。
我在头文件中有一个私有变量_stoplist
当我在头文件中声明它时,代码看起来就像这样。
private:
std::string _stoplist[];
但是当我后来在我的功能中我决定访问它时,它就会出现任何错误。
_stoplist[_length];
//cout << _length << prints 104 (its a valid int and everything)
_stoplist[0] = "b";
使用段错误在std :: string.assign()代码中崩溃。我有一种直觉,我错过了一些明显的东西,但我还没有发现什么。
提前致谢!
编辑:好的,谢谢你的帮助。对于其他可能阅读此内容的人,我建议使用下面的答案之一,因为这是明智的方法。在我的情况下,虽然我需要动态分配而不使用使用向量我只使用了以下代码。
private:
std::string *_stoplist;
然后在我的cpp文件中
_stoplist = new string[_length];
是的,事实证明它真的很简单,我只是在看那个部分。
答案 0 :(得分:2)
你得到一个数组越界错误,因为_stoplist没有大小。您应该给它一个大小,并且只访问该范围内的元素,例如:
private:
std::string _stoplist[100];
现在你应该能够通过_stoplist [99]索引_stoplist [0]。然而,更好的解决方案可能是使用std :: vector,因为它更安全。
private:
std::vector< std::string > _stoplist;
然后,您可以使用其成员函数(如resize())将其增长到您需要的任何大小。
答案 1 :(得分:1)
那是因为声明为std::string[]
的变量基本上只是一个指针。要使用它,您需要为它分配内存。如果要为其分配固定内存,请尝试将其声明为例如而是std::string _stoplist[5];
。