0

C++ を学習するプロセスです。次のエラーで、VC++ でコードの一部をデバッグするのに行き詰まりました。

Debug Error
*path to filename.exe*
Invalid allocation size:429496723 bytes.

エラーは、デバッガーが次のブロックに到達したときに正確に発生します:

int main(){

    vector <Student_info> students;

    Student_info record;

    string::size_type maxlen=0;// length of the longest name

    //read and store all the students data.

    //maxlen contains the length of the name of the longest student.

    while (read(cin,record)){
    // find the length of the longest name
        max(maxlen,record.name.size());
        //add the student record to the vector.

        students.push_back(record);
    }
    //arrange the records alphabetically.
    sort(students.begin(),students.end(),compare);// this may look weird but the fact that the names have to be compared is checked using the predicate.

        //write out the names and grades.


        for(vector<Student_info>::size_type i =0;i!=students.size();i++){

            //padding to ensure that there is vertical alignment.
            cout<<students[i].name<<string(maxlen+1-students[i].name.size(),' ');// debugger stops here!
            //compute grade.
            try{
                double final_grade=grade(students[i]);
                streamsize prec=cout.precision();
                cout<<setprecision(3)<<final_grade<<setprecision(prec);
            }
            catch(domain_error e){
            //catch error if hw vector is empty!

                e.what();

            }
            cout<<endl;

            }
        return 0;
        }
4

2 に答える 2

8

次の行を見てください。

max(maxlen,record.name.size());

あなたが意味したことは可能ですか:

maxlen = max(maxlen,record.name.size());
于 2012-06-08T08:43:20.380 に答える
3

0 に初期化した後、maxlen に値を割り当てることは決してありません。その後、それから 1 を引いて、負のオフセットを与えます。

最初のwhileループ内では、おそらく必要です...

   maxlen = max( maxlen, record.name.size() );
于 2012-06-08T10:03:49.443 に答える