Critical Error: Invalid memory read/write

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Critical Error: Invalid memory read/write

Re: Critical Error: Invalid memory read/write

Post by KHA » 05 Oct 2020, 09:49

Nutze jetzt eine Woche lang, 0 abstürze. Nochmal vielen Dank

Re: Critical Error: Invalid memory read/write

Post by KHA » 28 Sep 2020, 09:39

Hallo ihr beiden, vielen Dank für die Arbeit und Mühe!
Habe es eingebaut, bis jetzt funktioniert es Tadellos ohne abstürze. :)
Werde jetzt damit ein paar Tage arbeiten, dann habe ich die Gewissheit

Re: Critical Error: Invalid memory read/write

Post by just me » 28 Sep 2020, 08:03

Moin haichen,

danke für's Testen. Schaun wir mal, ob KHA's Probleme damit auch verschwinden.

:thumbup:

Re: Critical Error: Invalid memory read/write

Post by haichen » 28 Sep 2020, 07:00

Hallo just me,
ich habe mit dem Clipboard_GetText() und ClipBoard rumgespielt. Dabei habe ich beim Kopieren in der Schleife immer mal woanders hingeklickt.
Mit einer Clipboardzuweisung kam es immer dann zu Abstürzen wenn ich SendInput anstelle von Send verwendet habe. Ein Sleep nach der Zuweisung hat die Abstürze verhindert.
Deine Funktion ist nie abgestürzt!

Code: Select all

#Persistent
#NoEnv
SetBatchLines, -1

;stürzt ab mit SendInput
;ein sleep verhindert abstürze

;stürzt mit send nicht ab:

o::
i:=0
loop, 1000
{
	SendInput, +{Right}^c
	x:=Clipboard
        ;sleep, 10
	tooltip % i++  " " x
}
return

;stürzt nicht ab:
p::
i:=0
loop, 1000
{
	Send, +{right}^c
	x:=Clipboard_GetText()
	tooltip % i++ " " x
}
return


return
Clipboard_GetText() {
   Static CF_NATIVETEXT := A_IsUnicode ? 13 : 1 ; CF_UNICODETEXT = 13, CF_TEXT = 1
   ClipText := ""
   If DllCall("OpenClipboard", "Ptr", 0, "UInt") {
      If (HMEM := DllCall("GetClipboardData", "UInt", CF_NATIVETEXT, "UPtr")) {
         Chrs := DllCall("GlobalSize", "Ptr", HMEM, "Ptr") >> !!A_IsUnicode
         If (PMEM := DllCall("GlobalLock", "Ptr", HMEM, "UPtr")) {
            ClipText := StrGet(PMEM, Chrs)
            DllCall("GlobalUnlock", "Ptr", HMEM)
         }
      }
      DllCall("CloseClipboard")
   }
   Return ClipText
}

Re: Critical Error: Invalid memory read/write

Post by just me » 28 Sep 2020, 04:41

Moin,

schade! Dann kommt jetzt mein letzter Versuch: Wir holen uns den Text über die API-Funktionen. Ich glaube zwar eher nicht, dass das hilft, aber man weiß ja nie. Der AHK-Sourcecode enthält jedenfalls einige Hinweise auf immer mal wieder aufgetretene Probleme mit dem Clipboard.

Code: Select all

ZwischenablageG(Type) {
   If !(Type = 1) Or !Clipboard_HasText()
      Return
   ClipAlt := Clipboard_GetText()
   If (ClipAlt = "")
      Return
   ...
}
; -------------------------------------------
Clipboard_HasText() {
   Static CF_NATIVETEXT := A_IsUnicode ? 13 : 1 ; CF_UNICODETEXT = 13, CF_TEXT = 1
   Return DllCall("IsClipboardFormatAvailable", "UInt", CF_NATIVETEXT, "UInt")
}
; -------------------------------------------
Clipboard_GetText() {
   Static CF_NATIVETEXT := A_IsUnicode ? 13 : 1 ; CF_UNICODETEXT = 13, CF_TEXT = 1
   ClipText := ""
   If DllCall("OpenClipboard", "Ptr", 0, "UInt") {
      If (HMEM := DllCall("GetClipboardData", "UInt", CF_NATIVETEXT, "UPtr")) {
         Chrs := DllCall("GlobalSize", "Ptr", HMEM, "Ptr") >> !!A_IsUnicode
         If (PMEM := DllCall("GlobalLock", "Ptr", HMEM, "UPtr")) {
            ClipText := StrGet(PMEM, Chrs)
            DllCall("GlobalUnlock", "Ptr", HMEM)
         }
      }
      DllCall("CloseClipboard")
   }
   Return ClipText
}

Re: Critical Error: Invalid memory read/write

Post by KHA » 27 Sep 2020, 07:57

@just me

Ich bin ein großer Fan von deine Erklärungen und Tutorials, danke nochmal für die super Erklärung, habe eingebaut und Dateien konnte ich Problemlos kopieren.

Nachdem ich 10 verschiedene Textstellen aus verschiedene quellen (url, Dateien, Dateiname, Textpassagen aus wikipedia, Text aus Editor und Word) kopiert habe, trat der Fehler wieder auf
CriEro.png
CriEro.png (14.97 KiB) Viewed 1122 times
@haichen
werde jetzt auf 100 erhöhen

Re: Critical Error: Invalid memory read/write

Post by haichen » 27 Sep 2020, 07:06

:thumbup: Clipboard_HasText(). Super. Kommt sofort in meine Sammlung interessanter, potentiell nützlicher Funktionen. Danke.
@KHA Schade. Du könntest das Sleep evtl. noch vergrößern. Oder vielleicht hilft der Vorschlag von just me.

Re: Critical Error: Invalid memory read/write

Post by just me » 27 Sep 2020, 05:00

Moin,

das Systemclipboard kann unterschiedliche Daten enthalten, die durch unterschiedliche Formatbezeichner gekennzeichnet sind. Dazu gehören die Textformate (CF_TEXT, CF_UNICODETEXT, CF_OEMTEXT) und das Format CF_HDROP für das Drag&Drop von Dateien. Einer OnClipboardChange() Funktion wird als Typ die 1 übergeben, wenn das Systemclipboard ein Textformat oder CF_HDROP enthält. Die AHK-Variable Clipboard liefert bevorzugt den Text. Wenn kein Text vorhanden ist, werden die Dateinamen aus CF_HDROP als Text geliefert.

Wenn man Letzteres unterbindet, kannst Du Dir schon mal die FileExist() Prüfung für das Aussondern von Dateien sparen. Dafür reicht bereits der Aufruf einer API-Funktion:

Code: Select all

Clipboard_HasText() {
   Static CF_NATIVETEXT := A_IsUnicode ? 13 : 1 ; CF_UNICODETEXT = 13, CF_TEXT = 1
   Return DllCall("IsClipboardFormatAvailable", "UInt", CF_NATIVETEXT, "UInt")
}
Wenn Du die in ZwischenablageG() aufrufst kannst Du die Dateien blocken:

Code: Select all

ZwischenablageG(Type) {
   If !(Type = 1) Or !Clipboard_HasText()
      Return
Du kannst das ja mal probieren. Wenn es nicht hilft, habe ich noch etwas für einen weiteren Versuch.

Re: Critical Error: Invalid memory read/write

Post by KHA » 26 Sep 2020, 10:10

kriEro.jpg
kriEro.jpg (31.06 KiB) Viewed 1260 times
Leider zu früh gefreut, soeben poppte die Meldung wieder auf.

Re: Critical Error: Invalid memory read/write

Post by KHA » 26 Sep 2020, 08:46

@haichen vielen Dank!
scheint zu funktionieren, ich arbeite jetzt paar Tage damit, dann habe ich Gewissheit

Re: Critical Error: Invalid memory read/write

Post by haichen » 26 Sep 2020, 06:05

"Beim zweiten mal habe ich unterschiedliche stellen markiert, so das jedes mal etwas anderes kopiert wird. Beim 4489 ist dann mein Script abgestürzt mit der obigen Meldung."
Damit habe ich bei mir die Abstürze auch reproduzieren können.
Die Fehlermeldung ist identisch, bezog sich aber auf das 10000x-Schleifenskript!
Vermeiden konnte ich das mit einem Sleep,10 NACH der Zuweisung x:=clipboard.
Daher mal mein Vorschlag, das auch in dein Skript einzubauen. Also

Code: Select all

	ClipAlt := Clipboard
	Sleep, 10
Wenn du das dann mit dem 1000-Loop testen willst: das ging bei mir nicht - da mußte ich den Rechner neustarten :?

Re: Critical Error: Invalid memory read/write

Post by KHA » 26 Sep 2020, 04:51

Hier noch antworten auf deine Fragen:
Also wenn du gerade etwas kopierst, oder unabhängig davon?
Das Script stürzt immer ab, unmittelbar nachdem ich etwas kopiert habe
Oder sogar wenn du mal ein paar Tage nichts machst?
Da ich ein Copy&Paste junkie bin :), hat das Script einen Tag ohne Absturz noch nicht überstanden
Hast du noch einen zweiten Rechner um das auf dem mal zu testen?
Habe zu Hause nur einen PC (Win10 x64, version 2004), zum Ausprobieren, könnte ich es mit auf die Arbeit nehmen

Re: Critical Error: Invalid memory read/write

Post by KHA » 26 Sep 2020, 04:44

@haichen Guten morgen,
habe jetzt dein Script laufen lassen, beim ersten mal habe ich nur ein Satz aus Forum markiert, das Script lief bis 9999.
beim zweiten mal habe ich unterschiedliche stellen markiert, so das jedes mal etwas anderes kopiert wird. Beim 4489 ist dann mein Script abgestürzt mit der obigen Meldung.

Re: Critical Error: Invalid memory read/write

Post by haichen » 26 Sep 2020, 03:01

Ich habe mal versucht dein Skript zum Absturz zu bringen..
Ob der Ansatz dafür geeignet ist weiß ich nicht wirklich, aber damit ist es mir jedenfalls nicht gelungen!

Code: Select all

#Persistent
#NoEnv
#SingleInstance, force
SetBatchLines, -1

p::
i:=0
loop, 10000
{
	send, ^c
	x:=clipboard
	tooltip % i++
}
return
Stürzt es denn bei der Benutzung ab? Also wenn du gerade etwas kopierst, oder unabhängig davon? Oder sogar wenn du mal ein paar Tage nichts machst? Hast du noch einen zweiten Rechner um das auf dem mal zu testen?

Re: Critical Error: Invalid memory read/write

Post by KHA » 25 Sep 2020, 12:13

Das Script läuft bei mir Permanent im Hintergrund, die Fehlermeldung erscheint, wenn ich 8Std. am PC gearbeitet habe mindestens einmal.
Einen Zusammenhang zwischen erscheinen des Fehlers und einen bestimmten Aktion konnte ich nicht feststellen.


Code: Select all

If FileExist(ClipAlt)
      Return 
Was soll das bezwecken?
Der Zweck ist, wenn ich Dateien kopiere, werden die Pfade in Clipboard gespeichert, aber danach kann ich die Dateien nirgend wo einfügen, d.h. in Clipboard befinden sich nur noch strings. Damit will ich bezwecken, wenn es sich um Dateienpfade handelt, dann soll es nichts weitermachen.

Code: Select all

   Loop, 10 {
      Try
      {
         ClipAlt := Clipboard
      }
      Catch
      {
        Sleep, 1000
        continue
      }
      break
   }
Weshalb brauchst Du die Schleife und Try/Catch?
War ein Verzweiflungsakt, habe gehofft dadurch den Kritischen Fehler zu umgehen, nahm an Clipboard sei aus irgendwelchen gründen gesperrt /blockiert was auch immer.

Zweck des FileExist scheint mir zu sein, nur Dateipfade in die Zwischenablage aufzunehmen, die es nicht gibt.
Ich möchte nur Text also keine Bilder oder Dateien usw.
Später möchte mit StrReplace und RegExReplace gewisse Text stellen durch andere ersetzen.

Re: Critical Error: Invalid memory read/write

Post by haichen » 25 Sep 2020, 07:00

Aaah. OK. Dann macht das wohl Sinn. Super, wieder etwas gelernt. Danke.

Aber die Schleife gehört da sicher nicht hin. Die Änderung des Clipboards wurde ja schon mit OnClipboardChange festgestellt. Auch, dass darin nur Text ist (Type). Dann müßte man den Inhalt von Clipboard der Variable ClipAlt zuweisen und gut.
Da die Schleife (meistens) nicht stört, ist sie bestimmt nur eine Überbleibsel von Experimenten.

Re: Critical Error: Invalid memory read/write

Post by just me » 25 Sep 2020, 06:34

Hallo,

AHK's Clipboard Variable wird prinzipiell bei jedem Zugriff neu mit den passenden Inhalten der Systemablage gefüllt. Möglicherweise gibt es aber zwischen den Zugriffen eine 'Schamfrist' im Millisekundenbereich, während der nicht versucht wird, den Inhalt zu aktualisieren. Ich kann das im Sourcecode nicht eindeutig erkennen.

Re: Critical Error: Invalid memory read/write

Post by haichen » 25 Sep 2020, 06:13

Warum ist das denn ein Zugriff? Ist das nicht auch nur eine Variable? Hatte ich für mich immer gedacht. Da fehlt mir dann wahrscheinlich die Tiefe im Verständnis. Interessiert mich ernsthaft.

Re: Critical Error: Invalid memory read/write

Post by just me » 25 Sep 2020, 05:50

Code: Select all

ClipAlt := Clipboard
finde ich besser als wiederholte Zugriffe auf das Clipboard.

Und weil der Zugriff auf das Clipboard normalerweise funktionieren sollte, frage ich nach dem Grund für die Schleife. Die ist ja nicht eigenständig in den Code gerutscht.

Re: Critical Error: Invalid memory read/write

Post by haichen » 25 Sep 2020, 05:18

ClipAlt ist meiner Meinung nach überflüssig. Man kann einfach mit Clipboard arbeiten.
Die ganze 10x Schleife ist unnötig. In meiner Version habe ich sie entfernt. Und damit auch Try und Catch
Da der Fehler genau dort auftritt, ist meine Hoffnung, den sporadischen Fehler so eliminiert zu haben.

Zweck des FileExist scheint mir zu sein, nur Dateipfade in die Zwischenablage aufzunehmen, die es nicht gibt.
Aber das weiß KHA sicher genauer.

Top