2012-02-12 34 views
1

私は学校のプロジェクトに取り組んでおり、この基本的な問題に直面しています(これは割り当ての一部ではなく、問題の初期段階では後退しています)。ポインターの配列へのポインターがsegフォールトの結果を返します

配列を指すポインタを作成しようとしています。配列には、クラスオブジェクト "Customer"を指すポインタが含まれています。

ここにはcustomer.hです。 ここにcustomer.cppです。

#include "customer.h" 

int main() { 
    Customer** c_array; 
    c_array = new Customer*[10]; 
    cout << c_array[0]->getEnter() << endl; 


    return 0; 
} 

任意のアイデア:

は最後に、ここでの問題の原因となっている、私のメインのでしょうか?ここで

は誤りです:ポインタの配列を割り当て

Segmentation fault: 11 
+0

または何ポインタを使用するためにあなたのアイデアを与えましたか?全く?顧客顧客[10]と言って、それを済ませてください。ポインタは最初の年のC++コースから禁止されるべきです... –

+0

動的配列でなければなりません。私はそれを明確にしていない場合は申し訳ありません。 –

+0

必須ですか?本当に?どうして? –

答えて

4

はは、これらのポインタが指す何のために何を割り当てしません。だからあなたの声明:

c_array = new Customer*[10]; 

は、ポインタの配列を作成しますが、彼らは(あなたがそれらを逆参照しようとすると、セグメンテーションフォールトを引き起こして)どこかにランダム点。これらのポインタも初期化するループを記述する必要があります。

+0

ありがとう!それは私のばかげていた、私はちょうど私自身でこれを考え出したが、あなたは私より速くそれに乗った! –

+1

@JamesRosemanあなたが最も役立った答えを忘れずに選択してください。 [(Click)](http://cdn.sstatic.net/img/faq/faq-accept-answer.png)これは、このSOの質問に遭遇した場合、将来的に他の人にも役立ちます。 – Marlon

+0

申し訳ありません! –

1

c_array = new Customer*[10]を使用すると、ヒープ上にポインタの束を作成するだけで、実際の顧客にメモリを割り当てることはできません。このあとにCustomer Objectごとにメモリを割り当てる必要があります。代わりに以下を使用します。

int main() { 
    Customer* c_array[10]; 
    for(unsigned int i = 0; i < 10; ++i) 
     c_array[i] = new Customer; 
    cout << c_array[0]->getEnter() << endl; 

    return 0; 
} 

または

int main() { 
    Customer* c_array; 
    c_array = new Customer[10]; 
    cout << c_array[0]->getEnter() << endl; 
    delete[] c_array; 
    return 0; 
} 

または

#include <vector> 
int main() { 
    std::vector<Customer> c_array(10); 
    cout << c_array[0]->getEnter() << endl;  
    return 0; 
} 
+0

申し訳ありませんゼータは最初にそこにいる人にそれを渡しましたが、有益な答えに感謝します。私は前にを見たことがない。 –

関連する問題