我需要为学校做一份工作,我不能使用载体。 这是我的功能:
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();
时出现分段错误
我只需要以这种方式使用这个功能。
有什么问题?
答案 0 :(得分:0)
DtEmpleado *dtEmpleados[cantEmpleados];
是一个自动变量。自动变量在范围结束时被销毁。由于变量是在listarEmpleados
函数的范围内声明的,因此在listarEmpleados
返回后,该数组将被销毁并且不再存在。指向被破坏的数组的指针被称为&#34;悬空&#34;。取消引用这种悬空指针有不确定的行为。
其次,cantEmpleados
不是编译时常量,因此在C ++中使用它作为数组变量的大小是不正确的。
我需要在函数中使用该参数创建一个数组;我能做些什么?
您可以使用动态数组。