2016-11-12 21 views
0

私はここや他のサイトからさまざまなフォーラム投稿を見てきましたが、同様の問題については何も見ていません。私が抱えている問題は、配列要素が6以下の場合以外は、studentInfo配列が正しく実行されないことです。 は、私はちょうどしかし、コードが返され、23のサイズを持った配列を持つことができるようにしたい:クラス内の配列を使用する際に問題が発生する(C++)

bash: line 12: 51068 Segmentation fault  $file.o $args 

私は以下に提供したコードは、私の実際のコードの簡易版です。私は自分の割り当ての一部であるため、私のプログラムで配列を使用しなければなりません(いくつかのベクターはありません)。私はまだC++に少し慣れているので、どんな答えでも良い説明が素晴らしいでしょう。助けてくれてありがとう!それはvoid以外の戻り値の型で宣言されてもメンバ関数は何も返さないgetStudentInfoので

#include <iostream> 
#include <string> 

using namespace std; 

class StudentGrades { 
    private: 
    string studentInfo[23]; 

    public: 
    void setStudentInfo(string info) { 
     for (int i = 0; i < 23; ++i) { 
      studentInfo[i] = info; 
     } 
    } 

    string getStudentInfo() { 
     for (int i = 0; i < 23; ++i) { 
      cout << studentInfo[i] << " "; 
     } 
    } 
}; 

int main() { 

    StudentGrades student1; 

    student1.setStudentInfo("Bob"); 

    student1.getStudentInfo(); 
} 
+1

どのように簡略化されていますか? 1つの問題は 'getStudentInfo'が' string'を返さないということです。 –

答えて

1

コードは未定義の動作をしています。

はまた、マジックナンバーを使用しない方が良いでしょう

void getStudentInfo() const { 
    for (int i = 0; i < 23; ++i) { 
     cout << studentInfo[i] << " "; 
    } 
} 

ようにそれを宣言します。

class StudentGrades { 
    private: 
    static const size_t N = 23; 
    string studentInfo[N]; 
    .... 

などの静的定数データメンバーを追加して、必要な場所のどこでも使用できます。たとえば、

void getStudentInfo() const { 
    for (size_t i = 0; i < N; ++i) { 
     cout << studentInfo[i] << " "; 
    } 
} 
関連する問題