【发布时间】:2014-09-25 06:08:46
【问题描述】:
好的,这实际上是我编写的第一个 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;
}
【问题讨论】:
-
你试过调试了吗?
-
这可能应该是我的第一步,但老实说,我刚刚在 Sublime 中编写并在终端中编译。可能应该弄清楚如何为此使用 xCode。
-
或者学习使用GDB。
-
我想你可以通过注释掉
system1的声明很容易找到问题所在。这个程序很简单,调试它可能是一个非常小的消除过程。这是假设崩溃发生在currentUser的构造期间——而不是稍后的某个时间。 -
@nobar 从这个意义上说,我确实调试了它。我尝试注释掉 system1 的声明等,但它仍然抛出错误。