0

一見問題のないコードにセグメンテーション違反があります。障害が発生している場所はわかっていますが、修正できないようです。

for(int i=0; i<position.size();i++)
    {
            ordered[position[i]-1]= name[i];
      }

これは、コードが対応する番号を持つ名前のファイルを読み取り、名前を番号順にソートすることになっているという欠点です。参照用のコード全体は次のとおりです。

#include<iostream>
#include<string>
#include<vector> 
#include<fstream>
#include<sstream>
#include<algorithm>
using namespace std;

void print_vector(vector<string> ordered){
    for(int i = 0; i < ordered.size(); i++)
            cout << ordered[i] << " ";
    cout << endl;
}
int main() 
{
    ifstream inf;
    inf.open("input2.txt");
    string s;
    string word;
    vector<int> position;
    vector<string> name;
    vector<string> ordered;
    string n;
    int p;

    while( !inf.eof())
    {

            getline(inf, s);
            istringstream instr(s);
            instr>>p;
            instr>>n;
            while(!instr.eof()){
                    position.push_back(p);
                    name.push_back(n);
                    instr>>p;
                    instr>>n;
            }

    }
    for(int i=0; i<position.size();i++)
    {
            ordered[position[i]-1]= name[i];


    }
    print_vector(ordered);
    inf.close();
    return 0;
}
4

1 に答える 1

3

私の答えをコンパイルしてテストすることなく、「順序付けられた」ベクトルで割り当てを適切に使用するに0 <= position[i]-1 < ordered.size()は、常にそうであることを確認する必要があると思います。「ordered」は空で始まるため、範囲外にアクセスしようとしています。この質問/回答を参照してください。

したがって、範囲外の問題を回避するために、'insert' や 'push_back' などの別の修飾子メンバー関数の使用を検討することをお勧めします。ただし、同時に、「順序付けられた」ベクトルのインデックス値に依存して整数キー/値を表現しようとしているため、データの保存方法を変更したい場合があります。

于 2013-11-06T02:46:40.660 に答える