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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 2 3 4 5 [6] 7
51  Programación / Programación C/C++ / punteros como parametros de funciones que no retornan nada... buena idea? en: 23 Febrero 2019, 16:08 pm
Según he venido entendiendo hasta ahora, si yo creo un puntero, éste intenta localizar memoria en el espacio dinamico…. estos espacios de memoria deben ser liberados, pero que pasa en el siguiente caso?

Código
  1. void Persona::IngresarNombre(const char * nombre){
  2.     strcpy(this->nombre, nombre);
  3.  
  4.     delete nombre;   //Es esto necesario?
  5. }
  6.  


Que sucede con ese puntero a char que está como parámetro?, se elimina solo o yo debo eliminarlo también?

o es mejor idea esto?:

Código
  1. void Persona::IngresarNombre(const char nombre[16]){
  2.     strcpy(this->nombre, nombre);
  3. }
  4.  
Gracias.
52  Programación / Programación C/C++ / tiene sentido un puntero para uso como arreglo con una dimensión entregada? en: 22 Febrero 2019, 23:12 pm
Código
  1.  
  2. int main (){
  3.  
  4.        int * numero = new int[49];
  5.        numero[151] = 750;
  6.        std::cout << numero[151] << std::endl;   //esto imprime 750 sin problemas...
  7.  
  8.  
  9.        return 0;
  10. }
  11.  

Como verán, estoy creando un puntero con una dimensión de 49 espacios de memoria del tipo int, luego estoy asignando un valor a un indice que está mas allá del rango (49) y luego lo imprimo en pantalla....  lo curioso es que me funciona, por que ?... es que acaso es lo mismo declarar:

Código
  1. int * numero = new int[49];
  2.  

que

Código
  1. int * numero = new int;
  2.  

que opinan?..
Saludos..
53  Programación / Programación C/C++ / Puntero e indice 0 de ese puntero... en: 22 Febrero 2019, 02:22 am
Hola!

Estoy intentando crear una agenda y me he topado con algo que me parecio extraño:

Código
  1. //Persona.h
  2. class Persona{
  3.  
  4.       int edad;
  5.  
  6. public:
  7.       Persona() : edad(60){};
  8.       int LeerEdad() const {
  9.              return this->edad;
  10.       }
  11.  
  12. };
  13.  

Código
  1. //main.cpp
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. Persona * personas;
  6.  
  7. int main (){
  8.  
  9.       personas = new Persona;
  10.  
  11.       std::cout << personas->LeerEdad() << std::endl   //Esto imprime 60
  12.  
  13.       std::cout << personas[0].LeerEdad() << std::endl //Esto imprime 223525
  14.  
  15.       return 0;
  16.  
  17. }
  18.  

Me parecía haber leido en alguna parte que personas y personas[0] apuntaban al mismo segmento de memoria..... pero están imprimiendo dos valores diferentes... No son lo mismo?  El uso que quiero darle a "personas" es el de un arreglo.


Saludos y gracias.
54  Programación / Programación C/C++ / Sobrecarga de operador << solo me compila si uso la palabra "friend" en: 13 Febrero 2019, 04:44 am
Buenas amigos..

Tenía entendido que la palabra reservada "friend" permitía acceder a todas mis variables privadas de mi clase desde fuera, es como una excepción a la regla, para friend sería todo publico.

He querido utilizar el operador sobrecargado << para que mi clase pueda ser impresa por la salida estándar.

Esto es lo que tengo:

Código
  1. //Persona.h
  2. #include <iostream>
  3.  
  4. class Persona{
  5.  
  6.     char * nombre;
  7.     int edad;
  8.  
  9. public:
  10.  
  11.     Persona();
  12.     ~Persona();
  13.  
  14.     //La siguiente linea da error si no coloco la palabra friend al principio
  15.     std::ostream & operator<<(std::ostream & os, Persona & _estaPersona);
  16.     char * LeerNombre() const;
  17.     int LeerEdad() const;
  18.     void InsertarNombre(const char * _nuevoNombre);
  19.     void InsertarEdad(const int _nuevaEdad);
  20.  
  21. };
  22.  


Código
  1. //Persona.cpp
  2.  
  3. #include "Persona.h"
  4.  
  5. using namespace std;
  6.  
  7. //Sobrecarga operador
  8. ostring & operator<<(ostring & os, const Persona & _estaPersona){
  9.     os << "Nombre : " << _estaPersona.LeerNombre() << endl;
  10.     os << "Edad     : " << _estaPersona.LeerEdad() << endl;
  11.     return os;
  12. }
  13.  
  14. char * Persona::LeerNombre(){
  15.     return nombre;
  16. }
  17.  
  18. int Persona::LeerEdad(){
  19.     return edad;
  20. }
  21.  
  22. void Persona::InsertarNombre(const char * _nuevoNombre){
  23.     strcpy(nombre, _nuevoNombre);
  24. }
  25.  
  26. void Persona::InsertarEdad(const int _nuevaEdad){
  27.     edad = _nuevaEdad;
  28. }
  29.  
  30.  

Código
  1. //main.cpp
  2. #include Persona.h
  3.  
  4. int main (){
  5.     Persona p;
  6.     p.InsertarNombre("ElHacker");
  7.     p.Edad(37);
  8.  
  9.     std::cout << p << endl;
  10. }
  11.  

Lo que no entiendo, es que según la definición de friend, esto no me calza, yo no quiero acceder desde fuera a una propiedad privada, solo estoy intentando acceder a LeerNombre() y LeerEdad() que son publicas, no debería necesitar colocar friend... es que acaso friend con el operador trabaja de forma distinta?

Gracias de antemano.
55  Programación / Programación C/C++ / Punteros fantasmas... (asi le puse yo).. en: 10 Febrero 2019, 22:43 pm
Hola!
Me he topado con el siguiente escenario:

Código
  1.  
  2. //En este fragmento al terminar la función, se destruye el contenido de suma y retorna null o vacío, y el puntero suma sigue existiendo en memoria....
  3. int RetornaUnaSuma(int a, int b){
  4.  
  5.     int * suma = new int;
  6.     *suma = a+b;
  7.     return *suma;
  8. }
  9.  
  10. //Aqui intento retornar un puntero creado dentro de la misma función...
  11. int * RetornaUnaSuma(int a, int b){
  12.  
  13.     int * suma = new int;
  14.     *suma = a+b;
  15.     return suma;
  16.  
  17.     //pero al terminar la función, se destruye el contenido y retorna una dirección de memoria sin contenido, el puntero sigue existiendo..
  18. }
  19.  
  20.  

Según yo es mala práctica declarar punteros que quieras retomar dentro de una función o un ámbito...  bueno aparte de mala practica no funciona el retorno...Es como lo pienso?...

Probablemente se pueda devolver punteros cuando éstos mismos ingresan como argumento...

La función sería:

Código
  1. //Segun yo esto debe funcionar...
  2. int * RetornaUnaSuma(int * pSuma, int a, int b){
  3.  
  4.     *pSuma = a+b;
  5.     return pSuma;
  6.  
  7. }
  8.  


Que opinan...
Saludos.
56  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.
57  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.
58  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.
59  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.
60  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ó...
Páginas: 1 2 3 4 5 [6] 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines