[C con Clase] Problema extraño con memoria

Salvador Pozo salvador en conclase.net
Mie Jun 1 14:24:08 CEST 2011


El pasado 2011-05-31 11:28:03, Vicente escribió:
 
V> Hola buenas,
V> Estoy depurando un programa y me da un problema muy raro con la memoria.
V> Hay una modulo listas.c que gestiona listas de elementos:

Hola:

A mi me funciona, añadiendo este código para probar:

----8<------
int main() {
    ELEMENTO e;
    LISTA lista;

    e = malloc(2);
    strcpy((char*)e, "0");

    crear_unitaria_copiando(&lista, e, 2);

    cout << "Hello world!" << endl;
    return 0;
}
----8<------

Por lo tanto, sospecho que el error no está en el fragmento de código que adjuntas, sino en el que falta.

Casi con total seguridad, el fallo está el definir el tamaño. Recuerda que tienes que añadir un espacio adicional para el carácter nulo terminador. Por eso, para una cadena de un carácter, como "0", se debe indicar un tamaño de 2.

Si en este mismo código usas 1, o el valor de strlen(), se produce el fallo que comentas, porque en tu función no se copia el nulo terminador, y al mostrar la cadena, se siguen imprimiendo caracteres hasta que por casualidad aparece un nulo.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase