写入数组时出现分段错误

时间:2014-02-08 19:35:19

标签: c++ arrays syntax

我正在创建一个固定大小的空数组,然后写入特定的索引。但是,当使用我的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();
}

肯定在某处有一个初学者的错误吗?

1 个答案:

答案 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变量,它只存在于初始化函数的范围内,当你调用测试时,类范围的元素变量仍然是未定义的。