Geschützten Speicher zu lesen oder zu schreiben


#1

Hallo,

ich schreibe derzeit an einem Programm was mir eine Rute über Google errechnen soll.
In 80% der Fälle geht auch alles aber in 20% eben nicht dann bekomme ich diese Meldung

Eine nicht behandelte Ausnahme des Typs “System.AccessViolationException” ist in System.Windows.Forms.dll aufgetreten. Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

Ich habe bereits alles was mir einfällt versucht und suche auch schon seit Tagen das Problem nur leider will es nicht.

Hat jemand eine Idee was hier zu machen wäre ?

Es wäre noch noch zu erwähnen das es auch “AutoComplete” TextBoxen sind zur Adressvervollständigung.


#2

Hallo,

du solltest mal die betreffenden Codeabschnitte zeigen.

Gruß
albatros


#3

Problem ist nur das ich nicht mal weis was das ist

Und das wäre die Aktion bei der es zum absturz kommt

[CSHARP]private void tbStrasse_TextChanged(object sender, EventArgs e)
{
NameValueCollection postDataAdress = new NameValueCollection();
postDataAdress.Add(“address”, tbStrasse.Text);
postDataAdress.Add(“command”, “get_g_address”);
byte[] responseArray = MyWeb.UploadValues(“http://f.9853.de/api/”, “POST”, postDataAdress);
string klaus = Encoding.ASCII.GetString(responseArray);

        System.IO.StreamWriter file = new System.IO.StreamWriter("text.txt");
        file.WriteLine(klaus);
        file.Close();

        danhsach.Clear();
        DatenObj2 = Classes.JSON.JSONDeserialise<address_data>(klaus);
        if (DatenObj2.success >= 1)
        {
            string MyString = DatenObj2.address0;
            if (String.Compare(MyString, "[sz]") > 0)
            {
                string correctString0 = DatenObj2.address0.Replace("[sz]", "ß");
                danhsach.Add(correctString0 + " (" + DatenObj2.postal_code0 + " " + DatenObj2.locality0 + " " + DatenObj2.sublocality0 + ")");

            }
            else
            {
                danhsach.Add(DatenObj2.address0 + " (" + DatenObj2.postal_code0 + " " + DatenObj2.locality0 + " " + DatenObj2.sublocality0 + ")");
            }
            if (DatenObj2.success >= 2)
            {
                //
                string correctString1 = DatenObj2.address1;
                if (String.Compare(correctString1, "[sz]") > 0)
                {
                    correctString1 = DatenObj2.address1.Replace("[sz]", "ß");
                    danhsach.Add(correctString1 + " (" + DatenObj2.postal_code1 + " " + DatenObj2.locality1 + " " + DatenObj2.sublocality1 + ")");
                }
                else
                {
                    danhsach.Add(DatenObj2.address1 + " (" + DatenObj2.postal_code1 + " " + DatenObj2.locality1 + " " + DatenObj2.sublocality1 + ")");
                }
            }

            if (DatenObj2.success >= 3)
            {
                string correctString2 = DatenObj2.address2;
                if (String.Compare(correctString2, "[sz]") > 0)
                {
                    correctString2 = DatenObj2.address2.Replace("[sz]", "ß");
                    danhsach.Add(correctString2 + " (" + DatenObj2.postal_code2 + " " + DatenObj2.locality2 + " " + DatenObj2.sublocality2 + ")");
                }
                else
                {
                    danhsach.Add(DatenObj2.address2 + " (" + DatenObj2.postal_code2 + " " + DatenObj2.locality2 + " " + DatenObj2.sublocality2 + ")");
                }
            }

            if (DatenObj2.success >= 4)
            {
                string correctString3 = DatenObj2.address3;
                if (String.Compare(correctString3, "[sz]") > 0)
                {
                    correctString3 = DatenObj2.address3.Replace("[sz]", "ß");
                    danhsach.Add(correctString3 + " (" + DatenObj2.postal_code3 + " " + DatenObj2.locality3 + " " + DatenObj2.sublocality3 + ")");
                }
                else
                {
                    danhsach.Add(DatenObj2.address3 + " (" + DatenObj2.postal_code3 + " " + DatenObj2.locality3 + " " + DatenObj2.sublocality3 + ")");
                }
            }

            if (DatenObj2.success >= 5)
            {
                string correctString4 = DatenObj2.address4;
                if (String.Compare(correctString4, "[sz]") > 0)
                {
                    correctString4 = DatenObj2.address4.Replace("[sz]", "ß");
                    danhsach.Add(correctString4 + " (" + DatenObj2.postal_code4 + " " + DatenObj2.locality4 + " " + DatenObj2.sublocality4 + ")");
                }
                else
                {
                    danhsach.Add(DatenObj2.address4 + " (" + DatenObj2.postal_code4 + " " + DatenObj2.locality4 + " " + DatenObj2.sublocality4 + ")");
                }
            }
            /*
            */

        }
        tbStrasse.AutoCompleteCustomSource = danhsach;
        tbStrasse.AutoCompleteMode = AutoCompleteMode.Suggest;
        tbStrasse.AutoCompleteSource = AutoCompleteSource.CustomSource; 
    }[/CSHARP]

#4

Hallo,

woher weißt du, dass der Absturz im TextChanged-Event erfolgt, wenn der Debugger bei “Application.Run(…” stehenbleibt?

Gruß
albatros


#5

Wie albatros schon fragt … woher weißt du das der Fehler in diesem Event passiert?
Bzw. warum hast du diesen Code noch nicht gedebuggt um zu sehen welches Statement dir Probleme bereitet?


#6

MSDN-Dokumentation:
[EVIL]Eine AccessViolationException-Ausnahme wird daher nur bei Interaktionen zwischen überprüfbarem verwalteten Code und nicht verwaltetem Code oder unsicherem verwalteten Code ausgelöst.[/EVIL]

Du verwendest irgendwo selber eine native API (P-Invoke oder irgend was mit C++/CLI). Dabei erzeugst Du unter C# einen Pointer (IntPtr) den Du 1:1 an die native API weiter reichst. Nun räumt der GC auf bzw. verschiebt Deinen Pointer. Die native APi hat aber noch den alten Pointer, wo jetzt nichts mehr ist.


#7

[QUOTE=mogel]MSDN-Dokumentation:
[EVIL]Eine AccessViolationException-Ausnahme wird daher nur bei Interaktionen zwischen überprüfbarem verwalteten Code und nicht verwaltetem Code oder unsicherem verwalteten Code ausgelöst.[/EVIL]

Du verwendest irgendwo selber eine native API (P-Invoke oder irgend was mit C++/CLI). Dabei erzeugst Du unter C# einen Pointer (IntPtr) den Du 1:1 an die native API weiter reichst. Nun räumt der GC auf bzw. verschiebt Deinen Pointer. Die native APi hat aber noch den alten Pointer, wo jetzt nichts mehr ist.[/QUOTE]

ich verstehe nur Bahnhof :frowning:


#8

Dann beantworte doch die Frage von albatros :wink:
Warum weißt du das die Exception im TextChanged Event fliegt und wenn du es weißt, mit Debuggen wirst du auch die entsprechende Zeile finden können.

[CSHARP]tbStrasse.AutoCompleteCustomSource = danhsach;
tbStrasse.AutoCompleteMode = AutoCompleteMode.Suggest;
tbStrasse.AutoCompleteSource = AutoCompleteSource.CustomSource; [/CSHARP]

Ich gehe davon das aus tbStrasse eine Textbox sein soll. Da diese normal kein AutoComplete bereit stellt, verwendest du wahrscheinlich eine extra WPF Lib mit eigenen Controls.
Hier wäre es sehr hilfreich zu wissen, welches Lib das ist.