elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19
161  Programación / Programación C/C++ / Re: Llevo 1 año estudiando C++ aprox., y aún no hallo sentido a los punteros.. en: 10 Febrero 2019, 03:04 am
Saludos,

- La utilidad de los punteros está más enfoca al uso eficiente de la Memoria, lo que se dice Memoria Dinámica, ya has tocado los temas de Listas Enlazadas, Variables de tamaño variable en tiempo de ejecución, etc.

- Te recomiendo este libro, en su página 155 habla sobre el uso de los Punteros y muchos ejemplos donde demuestra el porqué de su uso:
https://openlibra.com/es/book/fundamentos-de-programacion-con-el-lenguaje-de-programacion-c-ed-2017

Capítulo 12

Memoria Dinámica. Punteros

Hasta ahora, todos los programas que se han visto en capítulos anteriores almacenan su estado
interno por medio de variables que son automáticamente gestionadas por el compilador. Las varia-
bles son creadas cuando el flujo de ejecución entra en el ámbito de su definición (se reserva espacio
en memoria y se crea el valor de su estado inicial), posteriormente se manipula el estado de la varia-
ble (accediendo o modificando su valor almacenado), y finalmente se destruye la variable cuando el
flujo de ejecución sale del ámbito donde fue declarada la variable (liberando los recursos asociados
a ella y la zona de memoria utilizada). A este tipo de variables gestionadas automáticamente por el
compilador se las suele denominar variables automáticas (también variables locales), y residen en
una zona de memoria gestionada automáticamente por el compilador, la pila de ejecución, donde
se alojan y desalojan las variables locales (automáticas) pertenecientes al ámbito de ejecución de
cada subprograma.

Así, el tiempo de vida de una determinada variable está condicionado por el ámbito de su decla-
ración. Además, el número de variables automáticas utilizadas en un determinado programa está
especificado explícitamente en el propio programa, y por lo tanto su capacidad de almacenamiento
está también especificada y predeterminada por lo especificado explícitamente en el programa.
Es decir, con la utilización única de variables automáticas, la capacidad de almacenamiento de
un determinado programa está predeterminada desde el momento de su programación (tiempo de
compilación), y no puede adaptarse a las necesidades reales de almacenamiento surgidas durante
la ejecución del programa (tiempo de ejecución). (1)

La gestión de memoria dinámica surge como un mecanismo para que el propio programa, du-
rante su ejecución (tiempo de ejecución), pueda solicitar (alojar) y liberar (desalojar) memoria
según las necesidades surgidas durante una determinada ejecución, dependiendo de las circuns-
tancias reales de cada momento de la ejecución del programa en un determinado entorno. Esta
ventaja adicional viene acompañada por un determinado coste asociado a la mayor complejidad
que requiere su gestión, ya que en el caso de las variables automáticas, es el propio compilador el
encargado de su gestión, sin embargo en el caso de las variables dinámicas es el propio programa-
dor el que debe, mediante código software, gestionar el tiempo de vida de cada variable dinámica,
cuando debe ser alojada y creada, como será utilizada, y finalmente cuando debe ser destruida
y desalojada. Adicionalmente, como parte de esta gestión de la memoria dinámica por el propio
programador, la memoria dinámica pasa a ser un recurso que debe gestionar el programador, y se
debe preocupar de su alojo y de su liberación, poniendo especial cuidado y énfasis en no perder
recursos (perder zonas de memoria sin liberar y sin capacidad de acceso).

1 En realidad esto no es completamente cierto, ya que en el caso de subprogramas recursivos, cada invocación
recursiva en tiempo de ejecución tiene la capacidad de alojar nuevas variables que serán posteriormente desalojadas
automáticamente cuando la llamada recursiva finaliza.

Gracias por tu respuesta!

Entonces los punteros están enfocados a ser utilizados en casos donde se requiera solicitar memoria dinámica, por ejemplo la dimensión personalizada de una matriz o arreglo.. verdad?..  y en que otros ámbitos se puede usar?
saludos!
162  Programación / Programación C/C++ / Re: Ejecutar comando en C++ sin system() en: 10 Febrero 2019, 00:47 am
Yo entiendo que queda feo, pero es práctico, a mi no me quedó mas remedio que recurrir a ncurses y al System...   es decir, como ultimo recurso, que mas da?... en el amor, la guerra y la programación todo se vale  ;D
163  Programación / Programación C/C++ / Llevo 1 año estudiando C++ aprox., y aún no hallo sentido a los punteros.. en: 10 Febrero 2019, 00:43 am
Hola amigos..

pues tal como se lee en el título, seguramente me creerán idiota o algo por el estilo (asumo que es muy probable que sea así después de hacer esta pregunta)..

Creí que los punteros tenían un poder enorme en la programación, referencia memoria en vez de valor, supuse que era la opción perfecta para interactuar con muchos datos, pero después de ver que los arreglos y matrices internamente se procesan como punteros (pues son las reglas que conozco al menos de manejar mucha información) no le hallé mas sentido a los punteros, es decir... si tengo :

Código
  1.  
  2. int numero = 5;
  3.  
  4. void ConsultarNumero(){
  5.   cout << "Numero es : " << numero << endl;
  6. }
  7.  
  8. void ModificarNumero(){
  9.    numero = 6;
  10. }
  11.  
  12. void SumarUnoAlNumero(){
  13.     numero++;
  14. }
  15.  
  16.  

En vez de :

Código
  1.  
  2. int main (){
  3.   int * numero = new int;
  4.   *numero = 5;
  5.   consultarNumero(numero);
  6.   modificarNumero(numero, 6);
  7.   sumarUnoAlNumero(numero);
  8.  
  9. }
  10.  
  11. void consultarNumero(int * _numero){
  12.     cout << "El numero es : " << *_numero << endl;
  13. }
  14.  
  15. void modificarNumero(int * _numero, int _nuevoNumero){
  16.    *_numero = _nuevoNumero;
  17. }
  18.  
  19. void sumarUnoAlNumero(int * _numero){
  20.    *_numero++;
  21. }
  22.  
  23.  
  24.  


Como verán, simplemente reemplacé el puntero por una variable global, de todas formas sin puntero estoy accediendo a una variable compartida sin la necesidad de consultar su memoria...

Alguien me podría guiar sobre el uso de punteros?
Gracias de antemano.
164  Programación / Programación C/C++ / Re: Que significa <>() ? (Esto lo vi en Unreal) en: 9 Febrero 2019, 03:22 am
Templates!...
Gracias amigo, voy a echarle un vistazo...
165  Programación / Programación C/C++ / Que significa <>() ? (Esto lo vi en Unreal) en: 8 Febrero 2019, 02:51 am
Hola señores..
Estoy intentando entender la sintaxis de Unreal.. y me topé con esto que no tengo claro:

Código
  1. UBoxComponent * caja = CreateDefaultSubmesh<UBoxComponent>(TEXT("Cubo"));
  2.  

lo que va entre < > no me queda claro que cosa es, obviamente es una clase pero por qué va entre signos mayor y menor que... y que sería CreateDefaultSubMesh ?

Gracias.
166  Programación / Programación C/C++ / Como comprimir y descomprimir un archivo desde c++ ? en: 30 Enero 2019, 22:07 pm
Hola amigos.

Tengo una alternativa para comprimir y descomprimir archivos desde el codigo, pero es algo bruta, simplemente usando la funcion system();  donde el parámetro es la linea de comando para comprimir o descomprimir:

Código
  1. system("gzip archivo.txt");
  2. system("gzip -d archivo.txt");
  3.  

Sin embargo, no se, algo me dice que no debo hacerlo asi, o quiza me persigue la idea de que debo aprender a toda costa a hacerlo usando librerias como zlib o 7zip...

Algun ejemplo de como comprimir o descomprimir?.. imagino que tengo que usar la clase FILE

Gracias de antemano.
167  Programación / Programación C/C++ / Conversiones con stringstream en: 26 Enero 2019, 20:57 pm
He estado buscando distintas formas de convertir de int a float, char* a string, char* a int, char* a float, string a float.. o cualquier otra que se venga en mente, hay varias funciones que hacen esto:

atoi()
stoi()
to_string()
etc...

Sin embargo, me encontré con que se puede hacer cualquier tipo de conversión usando stringstream:

Código
  1. stringstream ss;
  2. int numero;
  3. string strNumero = "5";
  4. ss << strNumero;
  5. ss >> numero;
  6.  

Hacer esto es extremadamente fácil, sin hacer un tipo de cast o invocar alguna función extra, y funciona...  La duda es, hay alguna restricción de conversión para stringstream?

Gracias.
168  Programación / Programación C/C++ / Re: Bus error : 10. (muy raro).. en: 26 Enero 2019, 20:13 pm
Ya esta, gracias por la explicación...
169  Programación / Programación C/C++ / Bus error : 10. (muy raro).. en: 19 Enero 2019, 16:46 pm
Buenas.

Estoy practicando C++ en 3 equipos, dos de ellos son OSX y otro es Xubuntu Linux, comparto mi aprendizaje entre los computadores usando git, así que actualizo el código cada vez que me cambio de equipo.

El problema en concreto es que en osx, al llegar a cierta parte del programa, se cierra mostrándome el mensaje "Bus Error : 10", cosa que no sucede cuando lo compilo y lo ejecuto en linux, me da la espina que puede ser algo del compilador, en ambos ejecuto la misma sentencia para compilar:

$c++ -o programa programa.cpp

Tengo identificada la linea que me manda ese error, está relacionada con la función
strcpy();

Tengo entendido que el error se refiere a que estoy invocando o asignando un valor a un indice que no existe o que tiene un formato incorrecto.  Pero de ser así, linux también debería botarme el programa..

El programa esta aqui:

https://paste.ofcode.org/BYUkcz7MFesBRRFyXjNCGg
Linea 352 específicamente.


*** EDIT ***
----------------

indiceAlumnoSeleccionado equivale a -1 al momento de usar strcpy, y eso marca el error de Bus Error 10, es lógico!, pero, por qué en linux me lo permite?..

*** EDIT 2 **
----------------

Linux permite la ejecución pero funciona mal, bueno, ya tengo identificado el problema, pero sería bueno si alguien sabe, me pueda explicar por qué los compiladores se comportan así, mi programa tenía un error y el compilador del Linux lo omitió...
170  Programación / Programación C/C++ / Re: Orden de ejecucuion de sentencias en: 18 Enero 2019, 19:13 pm
Excelente amigos, gracias por la explicación...

Me ha quedado claro.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines