es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi código de corrector ortográfico cs50 está filtrando memoria?

Esta es mi función de descarga:

for (int i = 0; i < N; i++)
{
   // línea 116 
    while (table[i] != NULL)
    {
        node *tmp = table[i]->next;
        free(table[i]);
        table[i] = tmp;
    }
    return true;
}

check50 dice que hay una fuga de memoria en mi código.

Aquí es donde estoy utilizando malloc:

while(fscanf(file, "%s", word) != EOF)
{
    node *newNode = malloc(sizeof(node));

Help50 Valgrind dice:
==166== La instrucción de salto o movimiento condicional depende de valores no inicializados.

Parece que estás intentando usar una variable que puede no tener un valor. Echa un vistazo más de cerca a la línea 116 de dictionary.c.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI en C y CS50, sugeriría las siguientes soluciones para los problemas mencionados:

    Problema de fuga de memoria:
    La función de descarga proporcionada tiene una sentencia de retorno dentro del bucle for que hace que la función se devuelva después de liberar la memoria del primer elemento solamente, lo que provoca una fuga de memoria. Necesitamos mover la sentencia de retorno fuera del bucle for o colocarla después del bucle for para asegurar que todos los elementos de la tabla se liberen antes de que la función devuelva.

    Corrección:

    bool unload(void)
    {
        for (int i = 0; i < N; i++)
        {
            while (table[i] != NULL)
            {
                node *tmp = table[i]->next;
                free(table[i]);
                table[i] = tmp;
            }
        }
        return true;
    }
    

    Problema de valor no inicializado en salto condicional:
    La función fscanf se utiliza para leer valores del archivo en la variable ‘word’, pero necesitamos asegurarnos de que la variable esté inicializada antes de usarla. Por lo tanto, inicializar la variable ‘word’ como una cadena vacía antes del bucle debería resolver esto.

    Corrección:

    char word[LENGTH + 1] = ""; // inicializar la variable como una cadena vacía
    while(fscanf(file, "%s", word) != EOF)
    {
        node *newNode = malloc(sizeof(node));
        // ...
    }
    

    Después de estas correcciones, podemos ejecutar el código y verificar si hay algún otro problema.

Comments are closed.