2016-08-22 12 views
0

2つの数字を分割するプログラムを書いています。"./a.out"を信号SIGSEGV(アドレス境界エラー)で終了させる

を信号SIGSEGV(アドレス境界エラー)

で終了し、そのエラーがラインに発生する「./a.out」:私は私が言うエラーを取得するプログラムを実行するたびに問題があります:

a = std::stoi(temp_vec.front()); 
b = std::stoi(temp_vec.back()); 

c = std::stoi(temp_vec.front()); 
d = std::stoi(temp_vec.back()); 

は、ここに私のプログラムです:

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

void split_number(std::vector<std::string> vect, int x); 

int main() 
{ 
    int x = 0, y = 0, a = 0, b = 0, c = 0, d = 0; 
    std::vector<std::string> temp_vec; 

    std::cout << "Enter x: "; 
    std::cin >> x; 
    std::cout << "Enter y: "; 
    std::cin >> y; 

    split_number(temp_vec, x); 
    a = std::stoi(temp_vec.front()); 
    b = std::stoi(temp_vec.back()); 

    split_number(temp_vec, y); 
    c = std::stoi(temp_vec.front()); 
    d = std::stoi(temp_vec.back()); 

    return 0; 
} 

void split_number(std::vector<std::string> vect, int x) 
{ 
    vect.clear(); 

    //1. convert x to string 
    std::string temp_str = std::to_string(x); 

    //2. calculate length 
    std::size_t len = temp_str.length(); 
    std::size_t delm = 0; 
    if(len % 2 == 0) { 
    delm = len/2; 
    } else { 
    delm = (len + 1)/2; 
    } 

    //3. populate vector 
    vect.push_back(temp_str.substr(0, delm)); 
    vect.push_back(temp_str.substr(delm + 1)); 
} 

助けてください。

答えて

3

ベクトルが空であるため、セグメント化エラーが発生します。最初のベクトルのコピーsplit_number()に渡すので、あなたのベクトルは空です。 split_number()の署名にはコピーが必要だと記載されているため、コピーが渡されます。それを変更します。

void split_number(std::vector<std::string> & vect, int x) 

アンパサンドはvectパラメータ参照パラメータを行い、変更が呼び出し元のコードで表示されます。

関連する問題