AccessViolationException: "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."

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    AccessViolationException: "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."

    Hallo zusammen,
    seit einiger Zeit tritt in einem von mir geschriebenen Programm sehr oft die AccessViolationException mit dem Fehler "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." auf, wenn ich etwas in eine bestimmte TextBox schreibe. Ich vermute, dass es an der angepassten AutoVervollständigung liegt, wüsste aber nicht, wordn genau, da mir keine Zeile markiert wird :( Hier ist der Codeausschnitt:

    VB.NET-Quellcode

    1. Private Sub doAutoComplete()
    2. Try
    3. Dim ls As New List(Of String)
    4. Dim t As String = doReplace(TextBox1.Text)
    5. Dim query As String = ""
    6. If Not TextBox1.AutoCompleteCustomSource.Contains(TextBox1.Text) Or lastInput = "" Then
    7. If scdict.Keys.Contains(t.Split(" ")(0)) Then
    8. If t.Contains("\") Then
    9. query = doReplace(TextBox1.Text.Substring(TextBox1.Text.Split(" ")(0).Length + 1))
    10. For Each e As String In My.Computer.FileSystem.GetDirectories(query.Substring(0, query.Length - query.Split("\")(UBound(query.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
    11. ls.Add(t.Split(" ")(0) & " " & e)
    12. ls.Add(t.Split(" ")(0) & " " & doReverseReplace(e))
    13. Next
    14. For Each e As String In My.Computer.FileSystem.GetFiles(query.Substring(0, query.Length - query.Split("\")(UBound(query.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
    15. ls.Add(t.Split(" ")(0) & " " & e)
    16. ls.Add(t.Split(" ")(0) & " " & doReverseReplace(e))
    17. Next
    18. End If
    19. Else
    20. If t.Contains("\") Then
    21. For Each e As String In My.Computer.FileSystem.GetDirectories(t.Substring(0, t.Length - t.Split("\")(UBound(t.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
    22. ls.Add(e)
    23. ls.Add(doReverseReplace(e))
    24. Next
    25. For Each e As String In My.Computer.FileSystem.GetFiles(t.Substring(0, t.Length - t.Split("\")(UBound(t.Split("\"))).Length), FileIO.SearchOption.SearchTopLevelOnly)
    26. ls.Add(e)
    27. ls.Add(doReverseReplace(e))
    28. Next
    29. Else
    30. ls.AddRange(scdict.Keys)
    31. End If
    32. End If
    33. For Each term As XElement In xdoc.<appconfig>.<history>.Descendants()
    34. ls.Add(term.Value)
    35. Next
    36. If scdict.Keys.Contains(t.Split(" ")(0)) Then
    37. For Each ac As String In scdict(t.Split(" ")(0)).AutoComplete
    38. ls.Add(t.Split(" ")(0) & " " & ac)
    39. Next
    40. End If
    41. ls.AddRange(startList)
    42. If Not (ls.Contains(t) And Not ls.Count = 0 And Not lastInput = TextBox1.Text) Or TextBox1.Text.Length = 1 Then
    43. TextBox1.AutoCompleteCustomSource.Clear()
    44. TextBox1.AutoCompleteCustomSource.AddRange(ls.ToArray)
    45. lastInput = TextBox1.Text
    46. End If
    47. ls = Nothing
    48. End If
    49. Catch
    50. End Try
    51. End Sub


    Und hier das TextChanged Event

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    2. Try
    3. If scdict.ContainsKey(TextBox1.Text.Split(" ")(0)) Then
    4. Me.Text = "QuExeCute - " & scdict(TextBox1.Text.Split(" ")(0)).Title
    5. Label1.Text = scdict(TextBox1.Text.Split(" ")(0)).Title
    6. Label1.Left = Me.Width - Label1.Width - 19
    7. PictureBox1.Image.Dispose()
    8. PictureBox1.Image = Image.FromFile(doReplace(scdict(TextBox1.Text.Split(" ")(0)).IconPath))
    9. ElseIf startList.Contains(TextBox1.Text) Then
    10. Label1.Text = l("startmenu")
    11. Label1.Left = Me.Width - Label1.Width - 19
    12. PictureBox1.Image.Dispose()
    13. PictureBox1.Image = My.Resources.QuickLaunch_Logo32
    14. Else
    15. Me.Text = "QuExeCute - " & l("title_openpath")
    16. Label1.Text = l("title_openpath")
    17. Label1.Left = Me.Width - Label1.Width - 19
    18. PictureBox1.Image.Dispose()
    19. PictureBox1.Image = My.Resources.QuickLaunch_Logo32
    20. End If
    21. Catch ex As Exception
    22. End Try
    23. Dim gtitle As Graphics = lblMsgText.CreateGraphics()
    24. Dim wtitle As Integer = Label1.Width
    25. If lblMsgText.Text <> "" Then
    26. wtitle = CInt(gtitle.MeasureString(Label1.Text, Label1.Font, Label1.Width).Width)
    27. gtitle.Dispose()
    28. End If
    29. Dim gtb As Graphics = lblMsgText.CreateGraphics()
    30. Dim wtb As Integer = TextBox1.Width
    31. If lblMsgText.Text <> "" Then
    32. wtb = CInt(gtb.MeasureString(TextBox1.Text, TextBox1.Font, TextBox1.Width).Width) + 15
    33. gtb.Dispose()
    34. End If
    35. If TextBox1.Width - wtitle > wtb Then
    36. Label1.Show()
    37. Else
    38. Label1.Hide()
    39. End If
    40. Try
    41. doAutoComplete()
    42. Catch ex As Exception
    43. End Try
    44. End Sub



    Auch wenn ich versuche, den Fehler mit Try-Catch Blöcken abzufangen, funktioniert es nicht. Ich hoffe, einer von euch kennt eine Lösung und bedanke mich schonmal im Vorraus :)

    Viele Grüße
    leolabs
    Hmm, hab die Try-Catch Blöcke jetzt mal rausgelassen, das Problem ist nur, dass die Exception nur manchmal auftritt und momentan tritt sie nicht auf :(

    Naja, wenn die Exception das nächste mal wieder auftritt melde ich mich nochmal :)

    Vielen Dank und Viele Grüße
    leolabs
    @jul ja, ich habs auch schon auf anderen Computern versucht und dort ist das Problem bis jetzt nur einmal aufgetreten.

    //EDIT: So, grad ist der Fehler wieder aufgetreten, es wird aber leider immernoch keine Zeile markiert, obwohl ich alle try-catch Blöcke rausgenommen habe :(

    Quellcode

    1. System.AccessViolationException wurde nicht behandelt.
    2. Message=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.
    3. Source=System.Windows.Forms
    4. StackTrace:
    5. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    6. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    7. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    8. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    9. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    10. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    11. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    12. bei QuExeCute.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    13. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    14. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    15. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    16. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    17. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    18. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    19. bei System.Threading.ThreadHelper.ThreadStart()


    So wie es aussieht hat es nicht sehr viel mit meinem Programmcode zu tun...

    Viele Grüße
    leolabs

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „leolabs“ ()

    Geh mal mit Einzelschritten alles durch, bis der Fehler kommt.
    Wenn Du nicht weißt, wie Einzelschritte gehen, dann klick F8.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Geh mal mit Einzelschritten alles durch, bis der Fehler kommt.
    Nein. Das dauert ewig und ist nur sinnvoll bei reproduzierbarem Fehler.
    Lass das Programm laufen bis es knallt, dann sieh Dir mit Shift-F9 die Variablen an und poste uns außerdem die richtige Zeile des Fehlers.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany:
    es wird aber leider immernoch keine Zeile markiert

    Zieh mal eine CheckBox in eine leere Form und füge diesen Code ein:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim TestInstanz As New Test(CheckBox1)
    3. End Class
    4. Class Test
    5. Public Sub New(ByVal NewCheckBox As CheckBox)
    6. NewCheckBox.Checked = True
    7. End Sub
    8. End Class

    Es wird keine Fehlerzeile markiert, sonern nur das "Es ist keine Quelle verfügbar" Fenster angezeigt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim TestInstanz As New Test(CheckBox1)
    3. End Class

    VB.NET-Quellcode

    1. Class Test
    2. Public Sub New(ByVal NewCheckBox As CheckBox)
    3. NewCheckBox.Checked = True
    4. End Sub
    5. End Class
    Bilder
    • Fehler.jpg

      53,51 kB, 637×362, 662 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Niko Ortner schrieb:

    Hast Du Professional?

    Ultimate.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab's noch mal im VS2008 professional (XP) probiert.
    Oben das war W7-64.
    Bilder
    • VS2008.jpg

      34,03 kB, 503×261, 606 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!