我正在创建一个固定大小的空数组,然后写入特定的索引。但是,当使用我的pushFront()方法执行此操作时,我收到了分段错误。
用gdb查看代码后:
(gdb) list
337 * first element in the %vector. Iteration is done in ordinary
338 * element order.
339 */
340 const_iterator
341 begin() const
342 { return const_iterator (this->_M_impl._M_start); }
343
344 /**
345 * Returns a read/write iterator that points one past the last
346 * element in the %vector. Iteration is done in ordinary
使用-Wall进行编译:
file.cpp: In constructor ‘StringStuff::StringStuff(int)’:
file.cpp:18:20: warning: unused variable ‘elements’ [-Wunused-variable]
vector<string>* elements = new vector<string>(2*guaranteedCapacity);
我不知道该怎么做。我的代码如下所示,我基本上调用了一个测试函数,它试图将字符串“test”添加到数组中。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class StringStuff{
vector<string>* elements;
int frontItem;
int rearSpace;
int upperBound;
public:
StringStuff(int guaranteedCapacity) {
vector<string>* elements = new vector<string>(2*guaranteedCapacity);
frontItem = guaranteedCapacity;
rearSpace = guaranteedCapacity;
upperBound = 2 * guaranteedCapacity;
}
virtual void pushFront(string newItem){
elements->at(--frontItem) = newItem;
}
virtual void test01(){
pushFront("test");
}
};
/** Driver
*/
int main() {
StringStuff* sd = new StringStuff(100);
sd->test01();
}
肯定在某处有一个初学者的错误吗?
答案 0 :(得分:1)
应该不是
virtual void pushFront(string newItem){
newItem = elements->at(--frontItem);
}
是
virtual void pushFront(string newItem){
elements->at(--frontItem) = newItem;
}
然后,看着提示-Wall给你:
vector<string>* elements = new ...
应该只是
elements = new ...
或者你将定义另一个elements
变量,它只存在于初始化函数的范围内,当你调用测试时,类范围的元素变量仍然是未定义的。