Hola! Soy nueva en esto de la programacion, mi duda es la siguinte: Como hago para pedir la longitud de un arreglo antes de crear el mismo?
Por ejemplo, quiero que mi arreglo sea de longitud 7 ... entonces como pido eso? despues una vez que haya señalado que sera de longitud 7, pedir los 7 valores y de ahi ya iniciar con las operaciones teniendo mi arreglo de longitud 7 con los valores que yo quiera.
Agradezco de antemano su ayuda! :rolleyes: :rolleyes: ;-)
en C o en C++?
en C sería algo como (este método también se puede usar en C++)
int *arreglo;//un puntero a un tipo int
int largo; //aquí definiremos el tamaño
//le pides al usuario el tamaño por el método que quieras
arreglo = (int *) malloc(sizeof(int) * largo);
en C++ es ligeramente más simple
int largo; //aquí definiremos el tamaño
//le pides al usuario el tamaño por el método que quieras
int *arreglo = new int[largo];
No olvides algo muy importante que es liberar la memoria
despues utilizarlos
para c se usa la funcion free
free(arreglo);
y para c++ delete cuando son punteros simples o delete[] cuando son arreglos dinamicos
delete[] arreglo;
Muchas gracias
;D ;D Genial la neta yo pensaba que eso no se podia hacer y veo que con punteros o apuntadores es posible
siempre trae algo bueno leer este foro
>:D >:D >:D
No es buena idea gestionar la memoria manualmente. En C++ deberías utilizar los punteros inteligentes: unique_ptr<> o shared_ptr<>
Cita de: Helbal en 7 Agosto 2015, 12:22 PM
No es buena idea gestionar la memoria manualmente. En C++ deberías utilizar los punteros inteligentes: unique_ptr<> o shared_ptr<>
Por muchas clases y funciones que existan para evitar el uso de punteros a los programadores, saber asignar memoria es necesario. Y tampoco es difícil. Solo hay que recordar liberarla.
Ese es el problema: "Solo hay que recordar liberarla". Eso es "mentira" y lo pongo entre comillas porque si y no. Me explico: el problema de utilizar punteros no es solo el recordar liberar la memoria sino que si en una función creas un puntero y surge algún tipo de error que envie una excepción, y que el delete se encuentra en esa misma función, va a haber una fuga de memoria.
Es cierto que puedes atrapar la excepción con un try{}, catch{} y liberar la memoria pero pueden surgir una enorme cantidad de problemas e intentar predecirlos todos no es precisamente fácil
Cita de: Helbal en 7 Agosto 2015, 16:51 PM
Ese es el problema: "Solo hay que recordar liberarla". Eso es "mentira" y lo pongo entre comillas porque si y no. Me explico: el problema de utilizar punteros no es solo el recordar liberar la memoria sino que si en una función creas un puntero y surge algún tipo de error que envie una excepción, y que el delete se encuentra en esa misma función, va a haber una fuga de memoria.
Es cierto que puedes atrapar la excepción con un try{}, catch{} y liberar la memoria pero pueden surgir una enorme cantidad de problemas e intentar predecirlos todos no es precisamente fácil
Como digo, hay que recordar liberarla. No liberarla en caso de excepción, es no recordar liberarla en una posible ruta del código xD
Temer a la memoria es absurdo. La memoria es parte necesaria del programa, que se usa constantemente. Creo que lo mejor que puede hacer un programador, es aprender C o ASM. Aprender lo que es la memoria. Aprender a tratarla. Aprender que es algo corriente, y aprender que hay que tener cuidado con ella. Es todo.
Los punteros inteligentes son punteros. No se trata de evitar el gestionar la memoria sino de evitar cualquier tipo de fuente de errores. Un puntero inteligente no deja de ser un simple puntero pero mejorado para asegurar que la memoria va a ser liberada correctamente.