• Lunes 18 de Noviembre de 2024, 08:27

Autor Tema:  Excepción "System.AccessViolationException"  (Leído 16313 veces)

zaiko

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Excepción "System.AccessViolationException"
« en: Domingo 31 de Julio de 2011, 17:16 »
0
Hola, un cordial saludos para todos quienes hayan tenido la amabilidad de leer este post.

Mi intervención aquí es para solicitar de su ayuda en un error que no he sido capaz de resolver por mi cuenta.

Resulta que hice un formulario que muestra un openFileDialog, pero al momento de compilar el Form y de cliquear sobre el botón donde hago la llamada al openFileDialog, me aparece el siguiente error:

"System.AccessViolationException"
"Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada."

No tengo idea a que se deba. Debo aclarar que estoy dentro de un formulario llamado FormConfiguracion al que accedo desde el menu principal una vez hecho el logueo de usuario y todo.

La cuestión es que si paso por el form del logueo y luego al menu para llegar al FormConfiguracion me sale siempre este error. En cambio, si modifico el program para q me envie directamente a este formulario no surge ningun tipo de error...

Espero me puedan ayudar... este es el código en el q se genera el error  :ayuda:

Código: [Seleccionar]
public void openDialog()
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.FileName = System.IO.Path.ChangeExtension(openFileDialog1.FileName, "png");

            if (openFileDialog1.ShowDialog() == DialogResult.OK)  //aqui es donde me marca error
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            nombre= openFileDialog1.FileName;
                            pictureBox1.Image = Image.FromFile(@nombre);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Excepción "System.AccessViolationException"
« Respuesta #1 en: Lunes 1 de Agosto de 2011, 05:32 »
0
Hola zaiko, bienvenido al foro.

Bueno, estuve investigando acercar de la Excepcion, y esa excepcion ocurre con punteros no validos (nulos) en codigo no manejado

Dado que dices que el error viene al llamar un formulario desde otro formilario, algo debe suceder en el primer formulario que estas llamando un puntero no valido en el segundo formulario, alguna variable mal declarada, o quizas liberada (destruida) en el primer formulario que hace que salte la excepcion en el segundo. Pero desafortunadamente sin ver el codigo completo, me temo que no puedo darte mas ayuda, solo estamos especulando.

Si puedes, y aun no lo has resuelto, postea tu codigo completo, si es demasaido largo, sube tu codigo en un archivo .zip como adjunto en tu mensaje, o subelo a algun servicio como megaupload o rapidshare (o algun otro que te guste), y publica tu enlace para que le podamos dar un viztazo.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

zaiko

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Excepción "System.AccessViolationException"
« Respuesta #2 en: Lunes 1 de Agosto de 2011, 09:06 »
0
Saludos... gracas por responder... aqui adjunto mi código...



Para acceder al error nos logueamos(clave ya esta por defecto) -> en el menu principal ir al meniStrip y cliquear en configuracion -> empresa -> editar -> examinar -> nos lanza el error   =(

Es un trabajo para la U. así que aún tengo que mejorar en cuanto a código. En el rar viene la base de datos, en la clase ConexionBd(carpeta DAC) está la ruta donde debe ser ubicada...

Espero se pueda solucionar esta excepción o de lo contrario me podrian aconsejar alternativas  =)

desde ya gracias.
« última modificación: Miércoles 3 de Agosto de 2011, 13:20 por zaiko »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Excepción "System.AccessViolationException"
« Respuesta #3 en: Lunes 1 de Agosto de 2011, 18:33 »
0
Hola zaiko, he revisado tu codigo, y afortunadamente (o desafortunadamente, como lo quieras ver), el codigo esta correcto y no me marca ningun tipo de error en la parte que mencionabas originalmente.

El unico detalle que tuve que hacer, es que elimine las referencias a Crystal Reports, ya que no lo tengo instalado en mi maquina, pero no creo que ese sea el origen del problema, ya que en esa parte no estas utilizando el CR.

Quizas el problema se deba a una mala instalacion del NET Framework, o te falta algun Service Pack, mi recomendacion seria que pruebes el sistema en otra maquina, para descartar que sea problema del sistema, y si no te marca error en otra maquina, reinstales el Framework en tu maquina de trabajo, y prueba instalando los parches para el Visual Studio.

Solo unos detalles adicionales, recomendaria que copies tu base de datos en el directorio donde esta el ejecutable, asi te evitas el tener que estar cambiando la ruta de acceso a la base de datos en tu codigo:

Código: [Seleccionar]
        public OleDbConnection ObtenerConexion()
        {
            OleDbConnection Conexion = new OleDbConnection();
            try
            {
                String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                "Data Source=GS.accdb";
                Conexion = new OleDbConnection(connectionString);
                Conexion.Open();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Conexion.Close();
            }
            return Conexion;
        }

Tambien añadiria codigo para cerrar tu formulario principal en caso de que lo cierres con la X, ya que se queda ejecutando sin manera de cerrarlo si lo cierras de esa manera:

Código: [Seleccionar]
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.ExitThread();
        }

Bueno, ojala y que reinstalando el Framework, solucione tu problema.

Saludos y  :suerte:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

zaiko

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Excepción "System.AccessViolationException"
« Respuesta #4 en: Martes 2 de Agosto de 2011, 04:18 »
0
Hola, pues intente volviendo a instalar el framework 4 pero nada... luego actualize el service pack y nada... no creo q sea cuestion del Visual ya q lo he probado con otra IDE(sharp Developed) y me envía el mismo problema... con todo gracias por responder y tomaré en cuenta tus recomendaciones gracias... si encuentro una solución la postearé...

Aunque si alguien más tiene conocimiento de como tratar con este tipo de excepciones sería de mucha ayuda... =)

Saludos.