2012-05-10 12 views
0

C++で新たに開始しましたが、かなり厄介な問題が残っています。私は動的配列を使用するとすぐに私は立ち往生しています。配列は実際にはデバッグ(表示画像)に乱れていて、アレイに1つ多くのオブジェクトを追加するとクラッシュします。これは私が1つの特定のプロジェクトを取得するエラーではありませんが、動的配列を使用するすべてのコードは、私もこのコースで先生によって作られたコードをコンパイルしようとしたが成功しませんでした。だから、おそらくそれは問題ではなく、おそらく他のコードである可能性は低いです。しかし、私はこれを証明するために使用したテストコードを安全に含めるだけでした。 Debug of the code配列が最初のインデックスを超えてクラッシュする

#include "iostream" 
#include "string" 
#include "Student.h" 
int main() 
{ 
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
    string input; 
    Student **students = NULL; 
    students = new Student*[20]; 
    for(int i = 0; i < 20; i++) 
    { 
     students[i] = new Student(); 
    } 
    for(int i = 0; i < 20; i++) 
    { 
     delete students[i]; 
    } 
    delete[] students; 
    return 0; 
} 



#include "Student.h" 
#include "string" 

Student::Student() 
{ 
    name = ""; 
    number = 0; 
} 
Student::Student(string Name) 
{ 
    name = Name; 
    number = 0; 
} 
Student::~Student() 
{ 

} 
string Student::getName() const 
{ 
    return name; 
} 



#ifndef STUDENT_H 
#define STUDENT_H 
#include "string" 
#include "Course.h" 
using namespace std; 
class Student 
{ 
private: 
    string name; 
    int number; 
public: 
    Student(); 
    Student(string Name); 
    virtual ~Student(); 
    string getName() const; 
}; 
#endif 
+2

生徒を配列に追加することはありません。 Studentオブジェクトをどのように配列に入れるのかという質問を更新してください – Attila

+4

'std :: vector'やその他のSTLコンテナの使用を検討するべきです。 – mfontanini

+2

あなたのテストでは、NULLポインタが指す値を検査できないことが実証されています。驚くべきことは何ですか? –

答えて

1

あなたは(あなたがまだ割り当てられていないため、内容が適切に無効である)学生ない配列学生を表示しようとしているので、それがデバッガでめちゃくちゃに見える理由がある 。デバッガは、動的に割り当てられた配列を表示することはできません。

また、students = new Student();?これはでもをコンパイルしてはならず、論理が間違っています。 Student**Student*を割り当てています。

原則として、自分のコードにnew[]を使用することは決してありません。常にstd::vectorを使用してください。その後、自動的に正しい数のStudentクラスが作成され、メモリやそれに類するものが漏れることはありません。

int main() { 
    std::vector<Student> students; 
    string input; 
    students.resize(20); 
    // Now you can use ALL THE STUDENTS 
    return 0; 
} 
+0

私は同意するが、何らかの理由で私はそれがクラスルームの設定だと思う。そして私は彼のポストの行列についてコメントしました。 – johnathon

+0

@ johnathon:教室であれば、彼は 'std :: vector'を使うことがより重要になります。 – Puppy

+0

いや、まあ、私を信じている私はクラスの部屋の設定C + +、cs101学生の宿題を見て、私を信じて、STDとSTLはどこにもないです。 – johnathon

関連する問題