导致此分段错误的原因是什么:11?

时间:2014-09-25 06:08:47

标签: c++ segmentation-fault

好的,这实际上是我写过的第一个C ++。因此,我尝试研究此分段错误错误未能产生我能理解的有用响应。大多数建议说我超出了堆内存,但我不知道自己在这段代码中的表现如何。也许我试图引用一些我无法引用的东西?

有人可以看看这段代码并告诉我是什么原因造成了这个错误吗?代码编译很好,它只是在运行时抛出此错误。我试图评论所有涉及向量的代码,但这并没有解决问题。我猜错了我想念的东西,或者只是一个我不理解的关于C ++的概念。无论哪种方式,一些洞察力将非常感谢!提前致谢。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

const int DEFAULT_SIZE = 15;



//---------------------------------User----------------------------------------------------------------------------------
//User Interface Definition
class User 
{
public:
    User(string nameValue);
    string getName();
    string getWall();
    string getHome();
private:
    string name;
};
//User Implementation Definition
User::User(string nameValue) : name(nameValue)
{
}
string User::getName() 
{
    return name;
}

//---------------------------------Group----------------------------------------------------------------------------------
//Group Interface Definition
class Group 
{
public:
    Group(string nameValue);
    string getName();
    void addMember(User newMember);
private:
    string name;
    vector<User> members;
};
//Group Implementation
Group::Group(string nameValue) : name(nameValue)
{
}
string Group::getName()
{
    return name;
}
void Group::addMember(User newMember)
{
    members.push_back(newMember);
}

//---------------------------------MessageBuffer----------------------------------------------------------------------------------
//MessgeBuffer Interface Declaration
class MessageBuffer 
{
public:
    MessageBuffer();
    void insert(string user, string recipient, string message);
    string readByGroup(string groupName);
    string readByUser(string userName);
    string readPublic();
private:
    string buffer;
};
//MessageBuffer Implementation
MessageBuffer::MessageBuffer() : buffer("")
{
}
void MessageBuffer::insert(string user, string recipient, string message) 
{
    buffer = "|<" + user + "::" + recipient + ">|" + message + buffer;
}
string MessageBuffer::readByGroup(string groupName) 
{
    return "Something";
}
string MessageBuffer::readByUser(string userName)
{
    return "Something";
}
string MessageBuffer::readPublic()
{
    return "Something";
}

//---------------------------------System-------------------------------------------------------------------------------
//System Interface Definition
class System 
{
public:
    System();
    void start();
private:
    bool running;
    User currentUser;
    MessageBuffer messageBuffer;
    vector<User> users;
    vector<Group> groups;
};
//System Implementation Definition
System::System() : running(false), currentUser(0)
{
}

void System::start() 
{
    running = true;
    string userSelection;

    cout << "===========================================================" << endl;
    cout << "|\t  Welcome to the Auburn Messaging System! \t  |" << endl;
    cout << "===========================================================" << endl;
    while (running) {
        cout << "1) Create a new user\n";
        cout << "2) Broadcast a message\n";
        cout << "3) Multicast a message\n";
        cout << "4) Unicast a message\n";
        cout << "5) Display Wall page\n";
        cout << "6) Display Home page\n";
        cout << "7) Create a new group\n";
        cout << "8) Join a group\n";
        cout << "9) Switch to a different user\n";
        cout << "10) Quit Auburn Messaging System\n";
        cin >> userSelection;
        if (userSelection == "1")
        {
            running = false;
        }
    }
}
//----------------------------------------------------------------------------------------------------------------------
int main() {
    cout << "Part 1";
    System system1;
    cout << "Part 2";
    system1.start();
    cout << "Part 3";
    return 0;
}

1 个答案:

答案 0 :(得分:0)

System构造函数中,currentUser(0)尝试初始化User构造函数的第一个参数(一个string),其字面值为零,将被解释为一个空的char指针。

将使用空指针调用构造来自char *的字符串的std::string构造函数(在调试器中查找basic_string<char>),它将取消引用并调用未定义的行为。