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

C++ 获取用户输入时出现分段错误,c++,segmentation-fault,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

我有这个:

    // 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;
    }
}
//获取数据库访问参数
const char*db=“code”、*server=“localhost”、*user=“root”、*pass=“pass”;
//连接到示例数据库。
mysqlpp::连接连接(false);
if(连接(数据库、服务器、用户、通行证)){
对于(int i=0;id;
cout>n2;
姓名;
mysqlpp::Query Query=conn.Query();

对于(int j=n2-n1+1;j您应该为

char * name;
在给它写信之前

如果您知道名称不会比MAXNAME长,那么只需定义名称即可

char name[MAXNAME+1]

<>这应该解决你的问题。

我看到你在使用C++。在这种情况下,你应该使用< /p>
std::string name;
所以你不必为它分配空间

经验法则:如果使用C++,则使用<代码> <代码>代替 char []/COD>;使用“代码> <代码>代替数组;使用构造函数初始化的成员变量而不是<代码> MalCube()/<代码>或<代码> NeW()/代码>。相信这将使您的编码更容易。


(每一条规则都有例外,但这是起点…

Thanx。还有一件事,我不能进入语法高亮显示,怎么了?@АцСааааааааааааа107如果你觉得答案是令人满意的,请考虑接受它。如果你真的推荐C++中的char数组,请说明如何避免缓冲区溢出。<代码> char name [ Max Nosi+ 1 ]
并不能解决问题,它只是将问题隐藏起来,直到不再存在名称的假设不再成立。你应该在下一个任务中学习使用调试器,例如gdb。调试器会告诉你,你在
cin>>name;
行中崩溃,并且
name
不是一个正常的指针。如果你在Linux上,尝试一下,我把它改成字符串,胡尔似乎是硬核。“记住,字符串Goodies不是免费的,而是有性能惩罚的。如果你可以忽略它,当然使用String。@ RoNB:一个伤害了许多C++项目的城市传奇,因为人们相信它,并写了半生不熟、bug缠身的C-S。如果你害怕调整大小,添加<代码> No.Read(Max Nosi+ 1);< /Cord>。当Knuth说出关于过早优化的话时,他指的就是这个例子。证明C++字符串是在编码<代码> char之前的性能瓶颈。。其他一切都是粗制滥造的。我见过许多项目因字符缓冲区溢出而受损,但没有一个项目因正确使用
std::string
@DevSolar这里有证据:见底部的表格。@RomanB::适用于OP的问题……如何?他既不使用D编写代码,也不使用类型de>name对其程序的性能至关重要。