Why it stops and finished with exit code 11?

2020-04-19 05:21发布

I don't know why it stops there and finished with exit code 11. It suppose to run until I give the command.

#include <iostream>
#include <string>
#include <fstream>
using namespace std;


void record(string name, string phoneNum, int count);

// main
int main() {
    cout << " Welcome to use the Phone Contact Systerm " << endl;
    string name;
    string phoneNum;
    int count = 0;
    string signToStop;
    cout << " Please enter name and phone number " << endl;
    while ( cin >> name >> phoneNum){
        cout << " If you want to start the program, enter start "         << endl;
        cout << " If you want to quit the program, enter quit " <<     endl;
        cin >> signToStop;
        if (signToStop == "start"){
            record(name, phoneNum, count);
            cout << " Please enter name and phone number " << endl;
        }
        else if ( signToStop == "quit" ){
            break;
        }
        cout << count << endl;
        count++;


    }
}

// record all name info into Name set and record all phone numbers         into PhoneNum set
void record(string name, string phoneNum, int count){
    string Name[] = {};
    string PhoneNum[] = {};
    Name[count] = {name};
    PhoneNum[count] = {phoneNum};

    // now start to record all the info into .txt document

    ofstream phoneFile;
    phoneFile.open("contact.txt");
    phoneFile << name << "  " << phoneNum << endl;
}

Result is:

 Welcome to use the Phone Contact Systerm 

 Please enter name and phone number 

Molly 5307609829

 If you want to start the program, enter start 

 If you want to quit the program, enter quit 

start

 Please enter name and phone number 

0

Lilyi 44080809829

 If you want to start the program, enter start 

 If you want to quit the program, enter quit 

start

Process finished with exit code 11

标签: c++ loops
2条回答
叛逆
2楼-- · 2020-04-19 05:52

Exit code 11 is not anything specific to the C++ standard. However, on Linux that code is generally used to represent a segmentation fault. Off the top of my head, I don't see anything glaringly wrong other than the fact that you never close the file after you write to it.

查看更多
Emotional °昔
3楼-- · 2020-04-19 06:04

The problem is this part right here:

void record(string name, string phoneNum, int count){
    string Name[] = {};
    string PhoneNum[] = {};
    Name[count] = {name};
    PhoneNum[count] = {phoneNum};

    //...
}

That's bad in C++ because string Name[] = {}; and others like it don't do what you think they do. They create an empty array of strings. Since variable length arrays are not a thing in C++, this creates a buffer overflow, which is undefined behavior. That's bad.

Use a std::vector instead:

void record(string name, string phoneNum){
    std::vector<std::string> Name;
    std::vector<std::string> PhoneNum;
    Name.push_back(name);
    PhoneNum.push_back(phoneNum);

    //...
}


P.S. There is another bug in your program. That is, Name and PhoneNum will get destroyed when the function exits each time. If that is intended, then fine. If you wish to keep a running list of records, that is bad. You can use a static variable to fix this:

void record(string name, string phoneNum){
    static std::vector<std::string> Name;
    static std::vector<std::string> PhoneNum;
    //...
}

查看更多
登录 后发表回答