获取用户输入时出现分段错误

Segmentation Fault when getting user input

本文关键字:分段 错误 用户 输入 获取      更新时间:2023-10-16

我有这个:

    // Get database access parameters 
    const char* db = "codes", *server = "localhost", *user = "root", *pass = "pass";
    // Connect to the sample database.
    mysqlpp::Connection conn(false);
    if (conn.connect(db, server, user, pass)) {
        for (int i=0; i<10; ++i)
        {
            int d, count;
            cout << "Введите Dn";
            cin >> d;
            cout << "Введите количество записей при D=" << d << endl;
            cin >> count;
            for (int a=0; a<count; ++a)
            {
                char * name;
                int r,n1,n2;
                cout << "Введите Rn";
                cin >> r;
                cout <<"Введите n1 и n2n";
                cin >> n1 >> n2;
                cout <<"Введите названиеn";
                cin >> name;
                mysqlpp::Query query = conn.query();
                for (int j=n2-n1+1; j<n2; ++j)
                {
                    int k =pow(2,(j+r));
                    query << "insert into code (n,k,d, name) values (" << j << "," << k << "," <<d<<"," << mysqlpp::quote_only << name << ");";
                    query.execute(); 
                }
            }
        }
        conn.disconnect ();
        return 0;
    }
    else {
        cerr << "DB connection failed: " << conn.error() << endl;
        return 1;
    }
}

很抱歉发布了所有的代码。我可以编译程序没有错误,但在命令行中,它说"分割错误"。这个错误是什么?如何解决呢?

您应该为

分配空间
char * name;

如果你知道name不会比MAXNAME长那么就把name定义为

char name[MAXNAME+1]

这应该能解决你的问题。

我看你在用c++。在这种情况下,您应该使用

std::string name;

所以你不必为分配空间。

经验法则:如果你正在使用c++,使用<string>而不是char[];使用<vector>代替阵列;使用构造函数初始化的成员变量,而不是 malloc() new()。相信我,这会让你的编程生活更轻松。

(每个规则都有例外,但这是起点…)