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

时间:2011-11-28 13:35:41

标签: c++ segmentation-fault

我有这个:

    // 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 << "Введите D\n";
            cin >> d;
            cout << "Введите количество записей при D=" << d << endl;
            cin >> count;
            for (int a=0; a<count; ++a)
            {
                char * name;
                int r,n1,n2;
                cout << "Введите R\n";
                cin >> r;
                cout <<"Введите n1 и n2\n";
                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;
    }
}

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

2 个答案:

答案 0 :(得分:7)

你应该为

分配空间
char * name;

在写信之前。

如果您知道该名称不会更长,那么MAXNAME则只需将名称定义为

char name[MAXNAME+1]

这应该可以解决你的问题。

答案 1 :(得分:5)

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

std::string name;

所以不必为其分配空间。

经验法则:如果您使用的是C ++,请使用<string>代替char[];使用<vector>代替数组;使用由构造函数初始化的成员变量而不是 malloc() new()。相信我,它会让您的编码生活更轻松。

(每条规则都有例外,但这是起点......)