• Martes 14 de Mayo de 2024, 22:57

Autor Tema:  Fallo con un puntero  (Leído 1979 veces)

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Fallo con un puntero
« en: Sábado 16 de Mayo de 2009, 18:49 »
0
Hola:

Uso el visual C++ y el código me da el siguiente erro

Unhandled exception at 0x004114fa in NeuralNetwork.exe: 0xC0000005: Access violation writing location 0x00000000.

He visto en otros foros (incluido en este) que el fallo está en un puntero, tal y como me indica también el programa. Mi duda es que no sé cómo solucionarlo, qué escribir. Mi archivo *.h es este :

#pragma once

class Nodo{

protected:
   float salida;
   int size_pesos;
   float* pesos;
//Este es el puntero que luego me dará el error
public:
   Nodo(int in_size_pesos, float in_salida);
   void print_pesos();
   void print_salida();

};


Éste es el método constructor, donde me salta el error:

Nodo::Nodo(int in_size_pesos, float in_salida)
{
   size_pesos = in_size_pesos;
   
   salida = in_salida;
   
   for(int i=0;i<size_pesos;i++)
   {

      (*pesos) =  static_cast<float> (i);//Y aquí el fallo
      (*pesos++);
   }
   pesos = pesos - size_pesos;*/
   
}


¿Cómo lo soluciono?
Muchas gracias

un saludo

PD: el fallo me salta con y sin el casting

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo con un puntero
« Respuesta #1 en: Sábado 16 de Mayo de 2009, 19:26 »
0
El problema es que ahi pesos es un valor indefinido (tenes suerte que es cero en tu caso), entonces si pesos apunta a 0 cuando desreferencias el puntero da una excepcion. Eso lo que haria de ser pesos un puntero valido es cambiar el float al cual apunta pesos. ¿Es eso lo que queres hacer? ¿O queres apuntar a un float? Para lo segundo tenes que hacer asignar un valor a pesos (pesos = new float; por poner un ejemplo) y no desreferenciar el puntero y asignarle un valor como haces ahora.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Fallo con un puntero
« Respuesta #2 en: Sábado 16 de Mayo de 2009, 19:46 »
0
Vamos a ver. Lo que quiero hacer es crear un objeto llamado Nodo. Entre sus atributos necesito que haya un array. El problema es que de primeras no puedo darle un valor fijo porque cada Nodo tendrá un array con un tamaño diferente. Por esa razón le paso como atributo un puntero de tipo float. Lo que quiero es que al llamar al constructor, yo pueda crear en memoria un array del tamaño que yo deseé. EN el código le daba esos valores para ver si funcionaba el asunto. Lo que pasa es que no me acabo de aclarar con el tema de punteros. El fallo está en que hago que el puntero apunte aun variable loca ¿verdad? ¿Cómo puedo conseguir lo que quiero?

Muchas gracias

un saludo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo con un puntero
« Respuesta #3 en: Sábado 16 de Mayo de 2009, 19:54 »
0
Código: Text
  1. pesos = new float[variable];
  2.  

En el destructor:
Código: Text
  1. delete[] pesos;
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Fallo con un puntero
« Respuesta #4 en: Sábado 16 de Mayo de 2009, 20:02 »
0
Muchas gracias. Llevaba atascado bastante en esto

Un saludo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo con un puntero
« Respuesta #5 en: Sábado 16 de Mayo de 2009, 20:25 »
0
De nadas  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.