2012-02-12 70 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++課程中被禁止... – 2012-02-12 21:21:33

+0

必須是一個動態數組。對不起,如果我沒有說清楚。 – 2012-02-12 21:22:12

+0

必須嗎?真?爲什麼? – 2012-02-12 21:22:34

回答

4

分配指針數組並什麼這些指針指向分配什麼。所以,你的語句:

c_array = new Customer*[10]; 

創建數組的指針,但它們指向的地方隨機(導致分段錯誤,當您嘗試取消引用它們)。你將需要編寫一個循環來初始化這些指針。

+0

謝謝!那是愚蠢的我,我只是自己想出了這個,但你比我快! – 2012-02-12 21:23:32

+1

@JamesRoseman不要忘記選擇你認爲最有幫助的答案。 [(Click)](http://cdn.sstatic.net/img/faq/faq-accept-answer.png)如果他們偶然發現這個SO問題,它也會在未來幫助其他人。 – Marlon 2012-02-12 21:43:58

+0

對不起! – 2012-02-12 21:53:04

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

對不起Zeta,把它交給那個先到那裏的人,但是謝謝你提供的信息豐富的答案。我以前從未見過。 – 2012-02-12 21:53:33