Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mozzard en 23 Enero 2019, 20:50 pm



Título: Duda punteros y referencias c++
Publicado por: Mozzard en 23 Enero 2019, 20:50 pm
Es una cosa sencilla que queria probar para testearlo y jugar un poco con ello para tener soltura, y no me compila lol, alguien sabe por que?
Código:
#include "pch.h"
#include <iostream>
using namespace std;
void refuncion(int&);
int main()
{
int* pnum;
*pnum = 5;
refuncion(&pnum);
}
refuncion(int& ref) {
cout << "El numero es: " << ref << endl;
}


Título: Re: Duda punteros y referencias c++
Publicado por: ivancea96 en 23 Enero 2019, 21:03 pm
Código
  1. refuncion(&pnum);

Con eso estás pasando como parámetro la dirección del puntero, es decir, un int** (dirección de una dirección).
Sin embargo, en la función esperas un int&. El uso de "&" antes de una variable es diferente a su utilidad después de un tipo. Para que esto compilase, deberías pasarle a la función "*pnum" (es decir, un int). "int&" es una referencia a un int, es decir, lo que le hagas al parámetro "ref" será como hacérselo a "*pnum".

Aunque este código compile, habrá un error, y es que al hacer "*pnum = 5" estás diciendo que "la variable a la que apunta "pnum" se establecerá a 5. El problema, es que "pnum" no apunta a ninguna variable.

Puedes hacer este cambio:

Código
  1. int num = 5;
  2. int* pnum = &num;
  3. // ...


Título: Re: Duda punteros y referencias c++
Publicado por: MAFUS en 23 Enero 2019, 22:41 pm
Lo que viene siendo ...

Premisa: una variable local sin inicializar puede tener cualquier valor.
Cuando generas el puntero local tiene un valor desconocido, pero al fin y al cabo un valor (por lo que apuntará a algún lugar desconocido).

Premisa: tocar una dirección de memoria fuera del marco que le ha dado el sistema operativo a tu programa hará que este lo detenga por seguridad.
Al dar un valor a la dirección de memoria apuntada por tu puntero estás intentando modificar ve a saber dónde que seguramente no te esté permitido. Por tanto el S.O. detiene tu programa.

Fin.