2017-08-06 24 views
0

私はC++でmySQLを実装しており、問題が発生しました。私はsegの欠陥を得ています。そして私はなぜそれがわからない。C++のMySQL Segフォールト

誰かが何が起こっているのか知りたいと思っていました。
MYSQL_ROW productList;行の後にsegフォルトが起こっているように見えますが、私はどこにピンポイントすることができませんでした。

void Receiving::getProduct(const string productToReturn) { 
MYSQL *connect, mysql;     //Pointers to MySQL 
connect = mysql_init(&mysql);   // Initialize the connections 
int totalRows = 0; 

connect = mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0); //Connect to database 

if(connect) {       //If connection successful 
    string sqlQuery;     //will hold query 

    MYSQL_RES *resSetProduct;   //define product result set 
    MYSQL_ROW productList;    //define row for product 

    sqlQuery = "SELECT * FROM Inventory WHERE item_id = \' "; //Create query with desired product id 
    sqlQuery += productToReturn; 
    sqlQuery += " \'"; 

    mysql_query(connect, sqlQuery.c_str());         // Send query to the database 
    resSetProduct = mysql_store_result(connect);        // Receive the result and store it in resSetProduct 
    totalRows = mysql_num_rows(resSetProduct);         // count of stored rows 

    if(totalRows == 0){              //nothing found 
     cout << "Sorry! No inventory found for that product!" << endl; 
    } 
    else { 
     cout << "Product Id  In Stock" << endl; 

     while((productList = mysql_fetch_row(resSetProduct)) != NULL) {  //printout the products 
      cout << productList[0] << " " << productList[1] << endl; 
     } 
    } 
    mysql_free_result(resSetProduct); 
} 
else                   //Failed to connect 
    cerr << "Failed To Connect!"; 

mysql_close(connect); 
} 
+0

クエリ(またはinit)が成功したかどうか、およびmysql_store_result呼び出し後にresSetProductがnullでないかどうかは決して確認しません。また、 '\ ''のあとにいくつか余分なスペースがありますが、それは目的ですか? – PhilMasterG

+0

先に進み、余分なスペースを削除しました。 segフォルトの原因となる(クエリーまたはresSetProductのチェック)しないでしょうか?私はこの同じクラスのために書いた他のメソッドから抜け出して、うまく動作します。私はこれに100%慣れていません。 – kevin

+1

mysql_real_queryがゼロを返すかどうかを確認する必要があります。そうでなければ、mysql_store_resultはNULLを返し、mysql_num_rowsはsegfaultで失敗するかもしれません。 – PhilMasterG

答えて

0

mysql_queryがゼロを返すかどうかを確認する必要があります。そうでない場合、mysql_store_resultはNULLを返し、mysql_num_rowsはsegfaultで失敗する可能性があります。

mysql_queryがゼロ以外の場合は、mysqlのマニュアルに従ってエラーコードをチェックすることができます。ここでは:MySQL mysql_query

これらのエラーがクリアされるとすぐに、mysql_num_rowsはそれ以上セグメンテーションを解除すべきではありません。

+0

ありがとうございました! – kevin

関連する問題