• Miércoles 20 de Noviembre de 2024, 10:18

Autor Tema:  Fallo en memoria  (Leído 1463 veces)

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Fallo en memoria
« en: Jueves 21 de Mayo de 2009, 10:51 »
0
Hola:

Mi problema es el siguiente. Tengo dos clases: Red y Nodo. En la clase red hay un triple puntero:

"Red.cpp"

protected:
  Nodo*** capas;//Es una matriz de punteros del tipo objeto Nodo


Ahora, en la misma clase, declaro las siguientes funciones:

Nodo***  Red::getCapas()
{
          return capas;
}

Nodo* Red::getNodo(int capa, int nodo)
{
       return capas[capa][nodo];
}


Y si me voy al MAIN y realizo, por ejemplo, lo siguiente:

Red* red = new Red(...);//creo Red

red->getCapas[j][k]->print_atributoDeNodo();//j y k son unos valores cualesquiera. El print es una función de la clase Nodo

Me compila correctamente pero al ejecutar el programa se me interrumpe la ejecución diciéndome:

Excepción no controlada en 0x00411fa1 en NeuralNetwork.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xcdcdcddd. Con las opciones de Interrumpir o Continuar.

En Resultados me sale lo siguiente:

'NeuralNetwork.exe': se cargó 'C:Documents and SettingspracticaEscritorioIA2_RNNeuralNetworkDebugNeuralNetwork.exe', Símbolos cargados.
'NeuralNetwork.exe': se cargó 'C:WINDOWSsystem32ntdll.dll'
'NeuralNetwork.exe': se cargó 'C:WINDOWSsystem32kernel32.dll'
'NeuralNetwork.exe': se cargó 'C:WINDOWSWinSxSx86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456msvcp90d.dll', Símbolos cargados.
'NeuralNetwork.exe': se cargó 'C:WINDOWSWinSxSx86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456msvcr90d.dll', Símbolos cargados.
Primera excepción en 0x00411fa1 en NeuralNetwork.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xcdcdcddd.
Excepción no controlada en 0x00411fa1 en NeuralNetwork.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xcdcdcddd.


Y si me voy al código de la función print por ejemplo ésta:

                                         void Nodo::print_delta()
                                        {

       ====>                               cout << "Delta del nodo: " << delta << endl;
                                        }


Me aparece esa flecha en amarillo.

¿Alguien sabe que es lo qué pasa? Si creo un Nodo normal, llamar a sus funciones no es ningún problema. Pero crear las funciones de acceso a un objeto de tipo Red, usarlas y acceder a los Nodos es todo un problema.

Un saludo

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Fallo en memoria
« Respuesta #1 en: Domingo 6 de Septiembre de 2009, 00:56 »
0
Pareciera que tienes un "wild pointer", un puntero que apunta a cualquier cosa. En otras palabras parece que no reservaste memoria para tu arreglo bidimensional de nodos, o no lo inicializaste para que apunte a la dirección de memoria correcta si tu objeto red no es el que crea dichos nodos. De hecho necesitas una llamada de constructor por nodo, otra por fila de nodos y otra por columna de punteros a fila de nodos.