指向数组指针会导致seg错误

时间:2012-02-12 21:19:32

标签: c++ segmentation-fault

我正在为一所学校的项目工作,并面临这个基本问题(这不是任务的一部分,只是问题初始阶段的挫折)。

我正在尝试创建一个指向数组的指针。该数组包含指针,每个指针指向一个类对象“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

2 个答案:

答案 0 :(得分:4)

分配指针数组为这些指针指向的内容分配任何内容。所以你的陈述:

c_array = new Customer*[10];

创建一个指针数组,但它们指向某处随机(当您尝试取消引用它们时会导致分段错误)。您还需要编写一个循环来初始化这些指针。

答案 1 :(得分: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;
}