Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: larregui15 en 22 Julio 2015, 23:44 pm



Título: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: larregui15 en 22 Julio 2015, 23:44 pm
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:  ;-)


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: engel lex en 23 Julio 2015, 00:11 am
en C o en C++?

en C sería algo como (este método también se puede usar en C++)

Código
  1. int *arreglo;//un puntero a un tipo int
  2. int largo; //aquí definiremos el tamaño
  3.  
  4. //le pides al usuario el tamaño por el método que quieras
  5.  
  6. arreglo = (int *) malloc(sizeof(int) * largo);


en C++ es ligeramente más simple

Código
  1. int largo; //aquí definiremos el tamaño
  2.  
  3. //le pides al usuario el tamaño por el método que quieras
  4.  
  5. int *arreglo = new int[largo];
  6.  



Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: crack81 en 23 Julio 2015, 00:34 am
No olvides algo muy importante que es liberar la memoria
despues utilizarlos

para c se usa la funcion free

Código
  1.  free(arreglo);
  2.  

y para c++ delete cuando son punteros simples o delete[] cuando son arreglos dinamicos

Código
  1.  delete[] arreglo;
  2.  


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: larregui15 en 23 Julio 2015, 02:28 am
Muchas gracias


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: 0and6 en 5 Agosto 2015, 07:12 am
 ;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


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: 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<>


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: ivancea96 en 7 Agosto 2015, 16:10 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.


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: 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


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: ivancea96 en 7 Agosto 2015, 16:56 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.


Título: Re: HOlA! Ayuda con una duda basica en arreglos!
Publicado por: Helbal en 7 Agosto 2015, 17:24 pm
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.