2016-12-05 12 views
-2

文字列を解析するためにstringstreamを使用していますが、関数から抜けている間にセグメント化フォルトが発生しています。C++の関数から復帰する際にセグメンテーションフォルトが発生する

bool check_if_condition(int a) 
{ 
    string polygonString1="19.922379 51.666267 19.922381 51.665595 19.921547 51.665705 19.921218 51.665753 19.920787 51.665815 19.919753 51.665960 19.919952 51.666897 19.920395 51.666826 19.920532 51.667150 19.920830 51.667748 19.920989 51.667905 19.921690 51.667906 19.922141 51.662866 19.922855 51.668696 19.922664 51.668237 19.922610 51.668025 19.922464 51.667451 19.922355 51.666732 19.922379 51.666267"; 

    double buf1; // Have a buffer string 
    stringstream ssPolygonString1(polygonString1); // Insert the string into a stream 

    double polygon1[2]; // Create vector to hold our words 
    int iterPoly1=0; 
    while (ssPolygonString1 >> buf1) 
    { 
     polygon1[iterPoly1]=(buf1);  
     cout<<"buf1="<<buf1<<"\n"; 
     iterPoly1++; 
    } 
    ssPolygonString1.str(""); 
    cout<<"Return true"; 
    return true; 
} 

main() 
{ 
    check_if_condition(1); 
} 

誰かが関数呼び出しで何が問題なのか理解してもらえますか?

私はそれは私にバスエラーを与えている、https://www.tutorialspoint.com/compile_cpp11_online.php上でそれを実行したC++ 11

を使用しています(コアダンプ)

+0

すべての警告とデバッグ情報( 'g ++ -Wall -g')でコンパイルしてください。デバッガを使用する( 'gdb') –

+0

@BasileStarynkevitch私はhttps://www.tutorialspoint.com/compile_cpp11_online.phpでそれを走らせて、バスエラー(コアダンプ)を与えています –

+2

' double polygon1 [2]; 'なぜ2 ? – kennytm

答えて

5

私はあなたがdouble polygon1[2]を言うとき、あなたはあなたのコメントによってベクトルを作成したいと仮定。

ベクターを使用すると、コードが機能します。

また、ベクターを使用する場合は必ずvector.push_back()を使用してください。

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 
bool check_if_condition(int a) 
{ 
    string polygonString1 = "19.922379 51.666267 19.922381 51.665595 19.921547 51.665705 19.921218 51.665753 19.920787 51.665815 19.919753 51.665960 19.919952 51.666897 19.920395 51.666826 19.920532 51.667150 19.920830 51.667748 19.920989 51.667905 19.921690 51.667906 19.922141 51.662866 19.922855 51.668696 19.922664 51.668237 19.922610 51.668025 19.922464 51.667451 19.922355 51.666732 19.922379 51.666267"; 

    double buf1; // Have a buffer string 
    stringstream ssPolygonString1(polygonString1); // Insert the string into a stream 
    vector<double> polygon1; // Create vector to hold our words 
    int iterPoly1 = 0; 
    while (ssPolygonString1 >> buf1) 
    { 
     //polygon1[iterPoly1] = (buf1); 
     polygon1.push_back(buf1); // Add buf1 to vector. 
     cout << "buf1=" << buf1 << "\n"; 
     iterPoly1++; 
    } 
    ssPolygonString1.str(""); 

    //Print vector to show it works! 
    for (int i = 0; i < polygon1.size(); i++) 
    { 
     cout << polygon1.at(i) << endl; 
    } 
    cout << "Return true"; 
    return true; 
} 

int main() 
{ 
    check_if_condition(1); 

    system("pause"); 

    return 0; 
} 
0

エラーは、ラインである: polygon1 [iterPoly1] =(BUF1)。

ベクトルの長さが2でiterPolyが2より大きくなるため、動作は予期しないものです。

関連する問題