diff --git a/tp3/tp3 b/tp3/tp3
index 8c908ef36069626952979641e37e84ab8f2e98cf..232f8a669ec169f962b26057b9f585a81857f33c 100755
Binary files a/tp3/tp3 and b/tp3/tp3 differ
diff --git a/tp3/tp3.c b/tp3/tp3.c
index b9b2a1aafc40b8e41d8e4bf1bdbac822c4abc5d9..623481c19590df162a50d1a0b4ded6c1a72b7b6c 100644
--- a/tp3/tp3.c
+++ b/tp3/tp3.c
@@ -35,8 +35,8 @@ racional **aleatorio_vetor_racional(int tam) {
 }
 
 /* inverte dois ponteiros para racional */
-void inverte(racional *r1, racional *r2) {
-	racional temp = *r1;
+void inverte(racional **r1, racional **r2) {
+	racional *temp = *r1;
 	*r1 = *r2;
 	*r2 = temp;
 }
@@ -48,10 +48,8 @@ racional **ordenar_vetor_racional(racional **vet, int tam) {
 	racional **ord;
 	if ( !(ord = malloc(tam * sizeof(racional*))) )
 		return NULL;
-
 	int i;
 	for (i = 0; i < tam; i++) {
-		*(ord + i) = criar_r();
 		*(ord + i) = *(vet + i);
 	}
 
@@ -60,12 +58,11 @@ racional **ordenar_vetor_racional(racional **vet, int tam) {
 		swaps = 0;
 		for (i = 0; i < tam-1; i++) {
 			if (menor_r(*(ord + i+1), *(ord + i))) {
-				inverte(*(ord + i+1), *(ord + i));
+				inverte((ord + i+1), (ord + i));
 				swaps++;
 			}
 		}
 	}
-
 	return ord;
 }
 
@@ -102,12 +99,12 @@ int main() {
     /* a funcao acima retorna NULL em caso de falha */
 
     /* imprime o vetor ordenado */
-	imprimir_vetor_racional(v, tam);
     imprimir_vetor_racional(w, tam);
 
     /* libera toda memoria alocada dinamicamente */
 	v = liberar_vetor_racional(v, tam);
-	w = liberar_vetor_racional(w, tam);
+	free(w);   /* o vetor w pode ser liberado normalmente, porque os ponteiros que apontam para numeros */
+	w = NULL;  /* racionais ja foram liberados na chamada de liberar_vetor_racional para v. */
 
     return 0;
-}
+