Intento hacer un programa al que se le pase por parámetro (en la línea de comandos) el tamaño de un array tipo float. Tengo que reservar el espacio necesario con malloc. El usuario debe introducir los valores del array. El programa los imprime. A continuación invierte el vector (aquí viene el problema) y se vuelve a imprimir el array. El array se imprime en el orden original otra vez. Debe de ser algún problema con las referencias, pero no lo encuentro ¿Alguien me echa un cable?
Para hacer más fácil la revisión, diré que el problema probablemente esté en la función invertir, lo demás funciona sin problemas.
Edito: ya lo he resuelto. El problema no es de referencias. En la función invertir escribí mal la condición de fin del for. Debe acabar cuando el índice i supere al tam, es decir, el for quedaría:
Código
for(int i = 0; i < tam; i++) { tmp = array[i]; array[i] = array[tam]; array[tam] = tmp; tam--; }
Código
#include <stdio.h> #include <stdlib.h> int POW(int a, int b); void invertir(float *array, int tam); int main(int argc, char *argv[]) { if(argc < 2 | argc > 2) { return 1; } int numero = 1; for(int i = 0; argv[1][i] != '\0'; i++) { if(argv[1][i] < 48 || argv[1][i] > 57) { numero = 0; } } if(numero == 0) { return 2; } int tam = 0; //tamaño del vector de floats (argumento programa) int tam_cadena = 0; //será el tamaño de la cadena argv[1] for(int i = 0; argv[1][i] != '\0'; i++) { tam_cadena++; } for(int i = 0; argv[1][i] != '\0'; i++) { tam += ((int)argv[1][i] - 48) * POW(10, tam_cadena-1-i); } //Creación del array tipo float de tamaño introducido por el usuario float *dir_array_float; float elem; for(int i = 0; i < tam; i++) { } for(int i = 0; i < tam; i++) { } invertir(dir_array_float, tam); for(int i = 0; i < tam; i++) { } return 0; } int POW(int a, int b) { int base = a; if(b>0) { while(b>1) { a *= base; b--; } } else if(b == 0) { return 1; } return a; } void invertir(float *array, int tam) { float tmp; tam--; for(int i = 0; i > tam; i++) { tmp = array[i]; array[i] = array[tam]; array[tam] = tmp; tam--; } return; }