C ++代码通过compling但返回Segmentation fault

时间:2014-02-13 18:41:47

标签: c++

我有以下用于练习序列表的C ++代码,它通过了编译器。但是,当我尝试运行它时,它会返回Segmentation fault。请帮忙!!非常感谢。

的main.cpp

#include <iostream>
#include <string>
#include "SeqList.h"

using namespace std;

int main() {

    SeqList seq;

    string vv[] = {"a", "b", "c", "d"};

    for (int i = 0; i< 4; i++) {
        seq.addElement(vv[i], i);

    }

    string* v  = seq.getSeq();
    for (int i=0; i<seq.getSeqSize(); i++) {
        cout << v[i] <<endl;
    }

    return 0;
}

SeqList.h

#include<iostream>
#include<string>

using namespace std;

class SeqList {

    private:
        string seq[];
        int size;

    public:
        void addElement(string, int);
        void delElement(string, int);
        string* getSeq();
        int getSeqSize();

};

SeqList.cpp

#include <iostream>
#include <string>
#include "SeqList.h"

using namespace std;


string seq[100];
int size = 0;

string* SeqList::getSeq(){
    return seq;
};

int SeqList::getSeqSize(){
    return size;
};

void SeqList::addElement(string str, int pos) {
    int i;
    for (i = size; i > pos; i--) {
        seq[i] = seq[i-1];
    }
    seq[i-1] = str;
    size++;
};

1 个答案:

答案 0 :(得分:2)

您的段错误正在发生,因为您在seq[i-1]时尝试访问addElement中的i = 0。这会尝试访问seq之外的内存,这会导致段错误。尝试使用seq[i]seq[i+1]代替seq[i-1]seq[i],但您必须确保永远不会调用超过99个值的代码,否则您将运行进入类似的问题,程序试图在seq结束后访问内存。

另外,在SeqList.cpp

string seq[100];
int size = 0;

当您尝试更改在SeqList.h中创建的值时,这些行正在创建新变量。要更改类中的私有值,您应该使用构造函数或其他函数来初始化值。