"Segmentation Fault" cuando igualo una lista a una estructura que contiene otra

Iniciado por Ccomplica, 21 Noviembre 2013, 20:37 PM

0 Miembros y 1 Visitante están viendo este tema.

Ccomplica

Buenas tardes comunidad. Tengo una consulta sobre un error tipo Segmentation fault que me tira el siguiente codigo cuando quiero igualar una lista creada, a una que está incluida en otra estructura. El código es el siguiente:

Funcion para crearArchivo en el directorio.

Código (cpp) [Seleccionar]
Archivo crearArchivoDirectorio(Directorio dir, Cadena nombre){
    Archivo arch;
    ListaArchivos archivoLista=new _listaArchivos;

    archivoLista=crearListaArchivos();

    arch=crearArchivo(nombre);
    printf("archivo creado");

    insertarArchivoListaArchivos(archivoLista,arch);
    printf("lista creada");

    dir->lista=archivoLista; //ACA ME TIRA EL ERROR EN EL DEBUGGER

    return arch;
};


Funcion para insertar archivo en lista de archivos:
Código (cpp) [Seleccionar]
void insertarArchivoListaArchivos(ListaArchivos &lista, Archivo archivo){

    ListaArchivos aux, nuevoArch=new _listaArchivos;

    nuevoArch->siguiente=NULL;
    nuevoArch->archivo=archivo;

    if(lista==NULL){
        lista=nuevoArch;
    }
    else{
        aux=lista;

        while(aux->siguiente!=NULL)
            aux=aux->siguiente;
        aux->siguiente=nuevoArch;
    }
};


La cosa es así: Yo le paso a la primera funcion una estructura de tipo Directorio, y una cadena con el nombre al que le quiero asignar al archivo a incluir en la lista de archivos dentro de la estructura directorio.

El error me lo tira cuando quiero igualar la lista creada localmente en la primera funcion, con la lista que está declarada e inicializada en la estructura directorio.

Supongo que es me falta reservar espacio de memoria en algún lado, no me doy cuenta donde...

Alguna idea?

Desde ya, cualquier aporte sera muy agradecido! Si tienen dudas sobre el codigo pregunten.


Saludos!

xaps

Te recomiendo que en la clase ListaArchivos te hagas una función copiadora o que sobrecargues el operador de asignación, puesto que puede que el compilador esté intentando usar un método inapropiado y haga saltar el error.

Por cierto, ¿no deberías cambiar en la tercera línea de ambos códigos el nombre _listaArchivos por ListaArchivos?

Saludos
"The programmers of tomorrow are the wizards of the future" - Gave Newel

Ccomplica

Cita de: xaps en 21 Noviembre 2013, 21:03 PM
Te recomiendo que en la clase ListaArchivos te hagas una función copiadora o que sobrecargues el operador de asignación, puesto que puede que el compilador esté intentando usar un método inapropiado y haga saltar el error.

Por cierto, ¿no deberías cambiar en la tercera línea de ambos códigos el nombre _listaArchivos por ListaArchivos?

Saludos
Buen día xaps, gracias por responder! Te comento que ListaArchivos es una estructura, o vos te referias al void insertarArchivoListaArchivo? A que te refieres cuando me dices una funcion copiadora?
En cuanto a la definicion de variables en las terceras lineas estan bien para este codigo porque la estructura (definida en un header) lo permite.

Gracias de nuevo,

Ccoomplica