2012-02-12 40 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