1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Erro de memória protegida/corrompida

Discussão em 'Programação' iniciada por Shy Angel, 21 de Abril de 2009. (Respostas: 6; Visualizações: 924)

  1. Boa tarde.

    tenho um form com uma combobox que ao trocar o valor apresentado eu fecho o form e reabro-o. o que acontece é que ocorre um erro do tipo memória corrompida (não posso afirmar mas penso que este erro ocorre apenas em ambiente xp, no vista penso que não ocorre - pelo menos nos testes efectuados). Alguém me pode ajudar a resolver este problema? É que não faço a ideia o porquê disto acontecer. Aki vai o erro:

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.
    ************** Exception Text **************
    System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
    at System.Windows.Forms.Control.DefWndProc(Message& m)
    at System.Windows.Forms.Control.WmCommand(Message& m)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ComboBox.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Loaded Assemblies **************
    mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    GesObra_Modulo_Qualidade
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///E:/Clientes/OPT Central/Ges...lidade/bin/Debug/GesObra_Modulo_Qualidade.exe
    ----------------------------------------
    System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI....0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    MySql.Data
    Assembly Version: 1.0.10.1
    Win32 Version: 1.0.10.1
    CodeBase: file:///E:/Clientes/OPT Central/Ges...bra_Modulo_Qualidade/bin/Debug/MySql.Data.DLL
    ----------------------------------------
    System.Data
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    OleDBConnMySql
    Assembly Version: 1.0.3103.29552
    Win32 Version: 1.0.3103.29552
    CodeBase: file:///E:/Clientes/OPT Central/Ges...Modulo_Qualidade/bin/Debug/OleDBConnMySql.DLL
    ----------------------------------------
    System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSI....0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    Common
    Assembly Version: 1.0.3212.20732
    Win32 Version: 1.0.3212.20732
    CodeBase: file:///E:/Clientes/OPT Central/Ges...GesObra_Modulo_Qualidade/bin/Debug/Common.DLL
    ----------------------------------------
    System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    SandBar
    Assembly Version: 1.0.8.0
    Win32 Version: 1.0.8.0
    CodeBase: file:///E:/Clientes/OPT Central/Ges...esObra_Modulo_Qualidade/bin/Debug/SandBar.DLL
    ----------------------------------------
    SourceGrid2
    Assembly Version: 2.0.7.0
    Win32 Version: 2.0.7.0
    CodeBase: file:///E:/Clientes/OPT Central/Ges...ra_Modulo_Qualidade/bin/Debug/SourceGrid2.DLL
    ----------------------------------------
    OleDBConn
    Assembly Version: 1.0.3103.28080
    Win32 Version: 1.0.3103.28080
    CodeBase: file:///E:/Clientes/OPT Central/Ges...Obra_Modulo_Qualidade/bin/Debug/OleDBConn.DLL
    ----------------------------------------
    BalloonWindow
    Assembly Version: 1.2.0.0
    Win32 Version: 1.2.0.0
    CodeBase: file:///E:/Clientes/OPT Central/Ges..._Modulo_Qualidade/bin/Debug/BalloonWindow.DLL
    ----------------------------------------
    SourceLibrary
    Assembly Version: 1.2.1.0
    Win32 Version: 1.2.1.0
    CodeBase: file:///E:/Clientes/OPT Central/Ges..._Modulo_Qualidade/bin/Debug/SourceLibrary.DLL
    ----------------------------------------
    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.
    For example:
    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>
    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.

    Linguagem C# (VS 2005)
     
  2. iznougud

    iznougud I quit My Job for Folding

    Dava jeito ver o codigo...
     
  3. Então é o seguinte código:

    (KUANDO ALTERO O VALUE DA COMBO)
    Código:
    private void cmbGrupo_SelectedValueChanged(object sender, EventArgs e)
            {
                if (btnGuardar.Text.Equals("Finalizar"))
                {
                    try
                    {
                        DataRowView drv = (DataRowView)cmbGrupo.SelectedItem;
                        familia = drv.Row.ItemArray[1].ToString();
    
                        this.Close();
    
                        if (Lentes.InstanceCounter == 0)
                            formCreate(new Lentes(familia));
                        else
                            formActivate(typeof(Lentes));
                    }
                    catch(Exception ex)
                    {
                        ErrorHandler erro = new ErrorHandler(ex, this, ErrorHandler.gravidade.Exclamativo, "Não foi possível seleccionar a família pretendida.");
                    }
                }
            }
     
    LOAD DO FORM
    Código:
    private void Lentes_Load(object sender, EventArgs e)
            {
                #region Define Familia e Restrições
                DataTable dt = new DataTable();
                string sql = "";
    
                dt = new DataTable();
                dt.Columns.Add("IDFamilia");
                dt.Columns.Add("Descricao");
                dataSelect = new OleDbAccessMySql("SELECT IDFamilia, Descricao FROM Familia WHERE Descricao LIKE 'Lente%'", OleDbAccessMySql.Ligacao.APLICACAO);
                if (dataSelect.DataTable.Rows.Count > 0)
                {
                    for (int i = 0; i < dataSelect.DataTable.Rows.Count; i++)
                    {
                        DataRow dr = dataSelect.DataTable.Rows[i];
                        dt.ImportRow(dr);
                    }
                }
                cmbGrupo.DataSource = dt;
                cmbGrupo.ValueMember = "IDFamilia";
                cmbGrupo.DisplayMember = "Descricao";
    
                if (familia.Equals("Lentes Oftálmicas"))
                {
                    cmbGrupo.SelectedValue = 1;
                    lblTratamento.Text = "Tratamento:";
                    lblSuplemento.Visible = true;
                    ckdlstboxSuplemento.Visible = true;
                    btnSuplementos.Visible = true;
                    lblCor.Visible = true;
                    ckdlstboxCor.Visible = true;
                    btnCor.Visible = true;
                }
                else if (familia.Equals("Lentes Contacto"))
                {
                    cmbGrupo.SelectedValue = 2;
                    lblTratamento.Text = "Género:";
                    lblSuplemento.Visible = false;
                    ckdlstboxSuplemento.Visible = false;
                    btnSuplementos.Visible = false;
                    lblCor.Visible = false;
                    ckdlstboxCor.Visible = false;
                    btnCor.Visible = false;
                }
                #endregion
    
                if (familia.Equals("Lentes Oftálmicas"))
                {
                    //tratamentos...
                    sql = "SELECT IDTratamento, Descricao FROM Tratamentos ORDER BY Descricao";
                    carregaCheckedListBox(sql, ckdlstboxTratamento, "Descricao", "IDTratamento");
                    //cores...
                    sql = "SELECT IDCor, Descricao FROM Cor ORDER BY Descricao";
                    carregaCheckedListBox(sql, ckdlstboxCor, "Descricao", "IDCor");
                    //suplementos...
                    sql = "SELECT IDSuplemento, Descricao FROM Suplementos ORDER BY Descricao";
                    carregaCheckedListBox(sql, ckdlstboxSuplemento, "Descricao", "IDSuplemento");
                }
                else if (familia.Equals("Lentes Contacto"))
                {
                    //generos...
                    sql = "SELECT IDGenero, Descricao FROM Generos ORDER BY Descricao";
                    carregaCheckedListBox(sql, ckdlstboxTratamento, "Descricao", "IDGenero");
                }         
    
                defineGrid();
    
                //fornecedores...
                sql = "SELECT IDFornecedor, Nome FROM Fornecedor ORDER BY Nome";
                carregaListBox(sql, listBoxFornecedor, "Nome", "IDFornecedor");    
    
                preenchida = 0;
                dataSelect = new OleDbAccessMySql("SELECT Preenchida FROM Familia WHERE IDFamilia=" + cmbGrupo.SelectedValue, OleDbAccessMySql.Ligacao.APLICACAO);
                if (dataSelect.DataTable.Rows.Count > 0)
                    preenchida = int.Parse(dataSelect.DataTable.Rows[0]["Preenchida"].ToString());
    
                if (preenchida == 1)
                {
                    preencheGrid();
                    seleccionaCheckedListBox(ckdlstboxTratamento, "FamiliaTratamento", "IDTratamento");
                    if (familia.Equals("Lentes Oftálmicas"))
                    {
                        seleccionaCheckedListBox(ckdlstboxCor, "FamiliaCor", "IDCor");
                        seleccionaCheckedListBox(ckdlstboxSuplemento, "FamiliaSuplemento", "IDSuplemento");
                    }
                    btnGuardar.Text = "Alterar";
                }                  
                
                if (sender != null)
                {
                    Editar(false, new Control[] { cmbGrupo, listBoxFornecedor, listBoxMarca, ckdlstboxRef, listBoxCaract, listBoxMaterial, ckdlstboxTratamento, ckdlstboxCor, ckdlstboxSuplemento });
                    Editar(false, new Control[] { btnFornecedores, btnMarcas, btnReferencias, btnCaracteristicas, btnSuplementos, btnTratamento, btnCor, btnMateriais });
                    btnCancelar.Text = "Sair";
                }
                else
                    btnCancelar.Text = "Cancelar";
            }
     
    Não sei se dá para perceber, mas é mais ou menos isto de acontece: selecciono um item da combo e fecho o form e abro-o de novo.
     
    Última edição pelo moderador: 22 de Abril de 2009
  4. iznougud

    iznougud I quit My Job for Folding

    No codigo nao da para ver bem, mas ve la se nao estas a tentar activar o form que fechaste sem criar um novo form com New. Esse teu Close esta-me a fazer confusao. Mais valia carregares tudo novamente mas sem fechar o Form. Ou entao criar um form novo. Acho que o teu problema esta na re-utilizacao do form.
     
  5. Podes ter razão mas eu fecho-o e dps crio-o da seguinte forma:

    if (Lentes.InstanceCounter == 0)
    formCreate(new Lentes(familia));
    else
    formActivate(typeof(Lentes));

    A questão é: é possível no vista não dar erro e no xp dar? :s
     
  6. iznougud

    iznougud I quit My Job for Folding

    It's MICROSOFT...
     
  7. inginheiiro

    inginheiiro Power Member

    it's dumb programming not microsoft.

    tenta criar uma thread child e matar a parent thread ... depois na child thread tenta invocar um metodo da parent thread...

    ops... se calhar é isso que estás a fazer...
     

Partilhar esta Página