Programación General > Visual C++
Fallo en memoria
(1/1)
cremix:
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:
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.
Navegación
Ir a la versión completa