私は人を追跡する課題を持っています。今のところ、私はcrud操作を行う必要があります。 私は動的配列にアクセスしようとすると、人のidのゲッターが動作しますが、人の電話のものは "セグメンテーションフォールト"を返し、人の名前のものは何も表示しません。セグメンテーションフォルトとゲッターの問題
//the main.cpp test that gives the following error
Controller ctrl(repp,repa,valp,vala);
ctrl.addPerson(1,"Name","0744000000","Adress");
ctrl.show();
//controller show method, repp - instance of repository in controler
void Controller::show()
{
repp->show();
}
//repository show method, which doesn't work
void PersonInMemoryRepository::show()
{
for(int i=0; i < pers.getSize(); i++)
cout<<pers.get(i)->getName()<<endl;
}
//getById method in repository
const Person* PersonInMemoryRepository::getById(int id)
{
for (int i = 0; i < pers.getSize(); i++)
{
if (pers.get(i)->getId() == id) {
return pers.get(i);
}
}
return NULL;
}
//the Person class
class Person
{
public:
Person(int i, string n, string p, string a);
const string& getName() const {
return name;
}
const string& getPhone() const {
return phone;
}
const string& getAdress() const {
return adress;
}
int getId() const {
return id;
}
~Person();
private:
int id;
string name;
string phone;
string adress;
};
//pers.get(i)
template<typename Element>
Element DynamicArray<Element>::get(int poz) {
return elems[poz];
}
ありがとうございます。
更新:それが行頭にあるとき< getName(); 。 pers.get(i)はうまく動作し、Person *型のベクトルで、デバッガで逆参照すると正しい値を持ちますが、 - > getName()に "無効な番号0の繰り返し"と表示されます。
あなたは「セグメンテーション違反」(またはそのことについてはクラッシュのいずれかのタイプ)を取得するときに、あなたが最初にすべきことをしていますデバッガでアプリケーションを実行します。これにより、クラッシュの位置を特定するのに役立ちます。また、変数を調べて何が原因かを調べるのに役立ちます。 –
コードを理解するのは難しいが、あまりにも多くのギャップがある。 – vid
最初に失敗したときは、セグメンテーションフォールト(またはそのタイプのクラッシュ)が発生したときに2番目にすべきことは、送信ボタンを押す前にコードを適切にインデントすることです。 –