IIC2333 / foro-2019-2

Foro oficial del curso IIC2333 - Sistemas Operativos y Redes, semestre 2019-2.
4 stars 0 forks source link

Valgrind [T2] #33

Closed DanielCarrascoFalcon closed 5 years ago

DanielCarrascoFalcon commented 5 years ago

Holaa, tengo errores en Valgrind, pero no son memory leaks, no entiendo bien a que se refieren o mejor dicho como solucionarlos... Valgrind -v me arroja esto: HEAP SUMMARY: ==24574== in use at exit: 0 bytes in 0 blocks ==24574== total heap usage: 21 allocs, 21 frees, 12,876 bytes allocated ==24574== ==24574== All heap blocks were freed -- no leaks are possible ==24574== ==24574== ERROR SUMMARY: 14 errors from 3 contexts (suppressed: 0 from 0) ==24574== ==24574== 3 errors in context 1 of 3: ==24574== Invalid write of size 4 ==24574== at 0x10926F: main (main.c:170) ==24574== Address 0x522ee48 is 0 bytes after a block of size 8 alloc'd ==24574== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==24574== by 0x109195: main (main.c:161) ==24574== ==24574== ==24574== 4 errors in context 2 of 3: ==24574== Invalid read of size 4 ==24574== at 0x10AB51: main (main.c:519) ==24574== Address 0x522ee48 is 0 bytes after a block of size 8 alloc'd ==24574== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==24574== by 0x109195: main (main.c:161) ==24574== ==24574== ==24574== 7 errors in context 3 of 3: ==24574== Invalid read of size 4 ==24574== at 0x109CC1: main (main.c:372) ==24574== Address 0x522f4f4 is 0 bytes after a block of size 4 alloc'd ==24574== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==24574== by 0x10913C: main (main.c:160) ==24574== ==24574== ERROR SUMMARY: 14 errors from 3 contexts (suppressed: 0 from 0)

La línea 161 del main dice: cola -> procesos[i] -> rafagas_espera = malloc(sizeof(int)*(cola -> procesos[i] -> largo_espera)); Mientras que la 170: for...{ cola -> procesos[i] -> rafagas_espera[l] = rafagas_espera[l]; }

Finalmente, esto incurre en algún descuento? Todo me funciona perfect, solo estos errores me faltan. Gracias!

Geeermy commented 5 years ago

¡Hola Daniel!

El tener errores implica que no cumples con el criterio de 0 memory leaks y errores. Esto no es tan terrible (5 décimas en total), pero entiendo de todas maneras que quieras tener ese puntaje si ya te funciona todo.

Revisando el log, lo único que me causa dudas es rafagas_espera. ¿Cómo lo defines? ¿Como un arreglo de punteros de enteros (int * * rafagas_espera) o como un arreglo de enteros no más (int * rafagas_espera)? Por ahí podría estar el error, si tomas como referencia este enlace: https://stackoverflow.com/questions/21847068/invalid-write-of-size-8-c-valgrind-string-arrays

Cuéntame cómo te va.

¡Éxito! :)

DanielCarrascoFalcon commented 5 years ago

Graciaas! Revisando, tenía mal definido el contador del for, entonces empezaba a leer datos que tenían números muuuy grandes (alojados por ahí en memoria, fuera del arreglo rafagas_espera) y al asignarlos al struct no eran del tamaño que yo había especificado en un principio... Intenté definir int * * rafagas_espera pero crasheo todo el programa y se quedó en loop infinito, así que buscando logré dar con la solución anterior!