TP3 - Vector

Para el Trabajo Práctico 3, se busca la implementación de un vector para realizar operaciones básicas, considerando uso correcto y responsable de memoria dinámica en el lenguaje de programación C.

Instalación del entorno de desarrollo en C

Para la elaboración del trabajo, se debe tener instalado:

  • gcc para compilación del programa.
  • valgrind para ejecutar binarios e identificar problemas con el uso de memoria.

Se provee una guía de instalación para las mismas. También se recomienda tener en cuenta la sección de preguntas frecuentes relacionadas a Lenguaje C y a memoria dinámica.

Archivos base

vector.zip

En el empaquetado se encuentran los siguientes archivos:

  • vector.c con las funciones solicitadas a completar por el trabajo práctico.
  • vector.h con la firma y documentación de las funciones del vector.c.
  • testing.c y testing.h con unas funciones auxiliares que complementan las pruebas.
  • pruebas.c que cuenta con el programa principal main con las pruebas básicas a ejecutar.

Funcionalidad a completar

Se deberá leer el archivo vector.h con la documentación, e implantar en vector.c las funciones correspondientes:

  • vector_crear()
  • vector_destruir()
  • vector_obtener()
  • vector_guardar()
  • vector_largo()
  • vector_por_escalar()
  • vector_sumar()
  • vector_redimensionar()

Ejecución de pruebas

La compilación se realiza en el estándar C99, con los siguientes flags:

gcc -g -std=c99 -Wall -Wconversion -Wno-sign-conversion -Wtype-limits -Werror -pedantic -o pruebas *.c

Si en la compilación sale algún error, deberá ajustarse el código para que pueda compilarse el binario pruebas.

Las advertencias notifican por posibles problemas que pueden surgir durante la ejecución. En el comando de compilación se incluye el flag -Werror el cuál transforma las advertencias en errores, de tal forma que si hay alguna advertencia el compilador no generará el binario. Para pruebas simples puede eliminarse -Werror y compilar con advertencias, pero la entrega final no deberá tener errores ni advertencias al compilar.

Una vez compilado el programa, se puede ejecutar de la siguiente forma con:

./pruebas

Todas las pruebas ejecutadas por el programa deber ejecutarse correctamente.

Ejecución de pruebas con Valgrind

Además de que las pruebas den OK, las mismas deben finalizar sin errores ni pérdidas de memoria. Para esto, se deberá ejecutar el programa con el comando valgrind de la siguiente forma:

valgrind --leak-check=full --track-origins=yes --show-reachable=yes --error-exitcode=2 ./pruebas

Una vez finalizada la ejecución, un programa sin errores ni pérdida de memoria debería mostrar lo siguiente:

  • Si no hay pérdida de memoria: All heap blocks were freed -- no leaks are possible
  • Si no hay errores de acceso de memoria: ERROR SUMMARY: 0 errors from 0 contexts

Reportes de ejecución

Junto con el archivo fuente vector.c, se deberán entregar tres archivos .txt con el resultado de la salida de la ejecución del programa:

  • ejecucion_basica.txt: salida del programa ejecutado por su cuenta, asegurando que todas las pruebas se ejecuten sin errores.
  • ejecucion_valgrind.txt: salida de la ejecución de Valgrind del programa, asegurando que la misma no tenga errores ni pérdidas de memoria.
  • ejecucion_valgrind_sin_destruir.txt: salida de la ejecución de Valgrind del programa, si se borra el cuerpo de la función vector_destruir() de tal forma que su llamada no realice instrucciones. Esto debería resultar en pérdidas de memorias, y las mismas deben encontrarse en el resultado. Una vez creado el archivo, restaurar la función para que la entrega final se ejecute sin problemas.

No será necesario agregar texto adicional explicando la salida. Con incluir el resultado de la ejecución completa alcanza.

Entrega

Se deberá entregar por el formulario de entregas bajo la sección TP3:

  • El archivo fuente vector.c, asegurando que dicho archivo pueda compilarse sin errores ni advertencias junto a las pruebas y las mismas se ejecuten sin pérdidas de memoria.
  • Los tres archivos con la información de salidas:
    • ejecucion_basica.txt
    • ejecucion_valgrind.txt
    • ejecucion_valgrind_sin_destruir.txt