返回指向数组分段错误的doble指针

时间:2017-04-18 11:29:05

标签: c++ arrays pointers return

我需要为学校做一份工作,我不能使用载体。 这是我的功能:

DtEmpleado** listarEmpleados(int& cantEmpleados){

    DtEmpleado *dtEmpleados[cantEmpleados];
    DtEmpleado *dtAux;
    int x=0,j=0,k=0;
    float sumaSueldo=0;
    RelacionLaboral **RLaux;

    while(x<MAX_EMPLEADOS){
        if(empleados[x]!=NULL){

            RLaux=empleados[x]->GetRLarray();            

            while(j<50){
                if(RLaux[j]!=NULL && RLaux[j]->GetFechaDesvinculacion().GetAnio()==0){
                    sumaSueldo=sumaSueldo+RLaux[j]->GetSueldoLiquido();
                }
                j++;                
            }

            dtAux=new DtEmpleado(empleados[x]->GetCi()
                    ,empleados[x]->GetNombre(),empleados[x]->GetApellido()
                    ,empleados[x]->GetDireccion()
                    ,sumaSueldo);    
            empleados[k]=dtAux;
            k++;            
        }
        x++;
        sumaSueldo=0;
        j=0;
    }
    return dtEmpleados;
}

我认为没关系,但是在主要功能中,我有一个带开关的菜单,如下所示:

int main() {

    DtEmpleado **aux;

    switch(option) {
    .....
    .....
        case 3:
                cout << "ingrese cantidad empleados\n";
                cin >> cantEmpleados;           
                dtAux=listarEmpleados(cantEmpleados);
                cout << dtAux[0]->GetCi();
                break;
    }
}

当我使用COUT << DTAUX[0]->GETCI();时出现分段错误 我只需要以这种方式使用这个功能。

有什么问题?

1 个答案:

答案 0 :(得分:0)

你认为错了,这不行。首先,数组

DtEmpleado *dtEmpleados[cantEmpleados];

是一个自动变量。自动变量在范围结束时被销毁。由于变量是在listarEmpleados函数的范围内声明的,因此在listarEmpleados返回后,该数组将被销毁并且不再存在。指向被破坏的数组的指针被称为&#34;悬空&#34;。取消引用这种悬空指针有不确定的行为。

其次,cantEmpleados不是编译时常量,因此在C ++中使用它作为数组变量的大小是不正确的。

  

我需要在函数中使用该参数创建一个数组;我能做些什么?

您可以使用动态数组。