Seite 1 von 1

Anweisung in 0x.. verweist auf Speicher (Programmierfehler)

Verfasst: 23.07.2007 18:54
von marco2007
Guten Abend,

folgendes Problem: Ich habe ein kleines Kalkulationsprogramm für die Arbeit geschrieben. Das Programm funktioniert auf jeden PC. Dann habe ich das Programm erweitert und neu kompiliert....Das neue Programm funktioniert fast auf allen Rechnern, eben nur fast...auf dem des Chefs nicht..... :mrgreen:

Folgende Fehlermeldung erscheint beim Start: Die Anweisung in 0x004321f6 verweist auf Speicher 0x00000043. Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden. :?


Vielleicht noch folgende Anmerkung: Als ich das neue Programm kopieren (altes Programm überschreiben) wollte, war das Programm beim Chef geöffnet (liegt am Netz)....daraufhin habe ich das Programm umbenannt...

Was kann man da machen? Hat jemand eine Ahnung?

Danke, schon mal im voraus....

PS: Das alte Programm (erste Version) funktioniert bei ihm jedoch noch immer...

Titel geändert

Verfasst: 23.07.2007 19:08
von Kaeru Gaman
> Die Anweisung in 0x004321f6 verweist auf Speicher 0x00000043. Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

das ist ein IMA

> ...daraufhin habe ich das Programm umbenannt...

welches.. das laufende?

also, mir ist so ein verhalten nicht bekannt.
...aber ich beende auch programme bevor ich ne neue version drüberziehe.

grundsätzlich läßt sich so ins blaue garnichts sagen.

läuft das alte programm ständig?
dann sind vielleicht irgendwelche files geöffnet?

ich mein, warum hast du das programm nicht einfach beendet?!?


> Was kann man da machen?

ich würde beide programme und sämtliche korrespondierenden daten auf
diesem rechner komplett löschen, und dann die neue version aufspielen.

Verfasst: 23.07.2007 19:33
von marco2007
Ich habe nicht gedacht, daß der Chef, daß Programm bereits nutzt....
Ich habe aus Versehen das laufende (alte) Programm versucht zu überschreiben (war nicht zu sehen für mich - da *.exe am Netz)...ging eh nicht...

Das alte Programm, daß ich überschreiben wollte, funktioniert überall und das neue mit neuem Namen überall nur nicht beim Chef...

Die Idee mit allen Programmen (2 Exe (alte+neue)+ 3 Datenbanken) zu löschen, finde ich gut....

BTW: Kann es auch sein, daß der Chef einfach etwas falsch gemacht hat (Systemeinstellung, ..??) und mein Programm gar nichts dafür kann?

Verfasst: 23.07.2007 20:07
von HeX0R
Bau mal OnError bzw. TryCatch (oder wie hiess das ?) in dein Programm ein, damit kommst du der Sache sehr viel leichter auf die Schliche und es werden vernünftige Fehlermeldungen produziert.
Das klingt sehr nach einem eigenproduzierten Fehler.

Verfasst: 23.07.2007 20:17
von marco2007
Ich glaube zwar nicht, da ich ja nur primitive Sachen progge und das Programm ja im Prinzip überall läuft.... aber vielleicht täusche ich mich ja:

Reicht es, wenn ich am Anfang:

Code: Alles auswählen

OnErrorGoto(?CatchError)
setze un ganz am Schluss:

Code: Alles auswählen

CatchError:


Msg$ = "There was an error:"+Chr(13)+Chr(10)+Chr(13)+Chr(10)
Msg$ + "Description: " + GetErrorDescription()+Chr(13)+Chr(10)
Msg$ + "Total number of errors: "+Str(GetErrorCounter())+Chr(13)+Chr(10)+Chr(13)+Chr(10)
Msg$ + "The program will end now."
Und das funkt?

Verfasst: 23.07.2007 21:16
von HeX0R
Hier gibts ne Include, die du einfach in deinen Source pappen kannst.
Dann noch Häkchen in der Compileroption "OnError Unterstützung einschalten" machen und neu compilieren.

Verfasst: 23.07.2007 21:25
von marco2007
Wow, Danke.... :allright:

Ich habe einfach den ganzen Teil am Anfang des Programms kopiert, OnError eingeschaltet, und neu mit neuem Namen kompiliert....

...Funkt das so?....da bin ich `mal morgen gespannt (daheim funkt ja alles 8) ).....

Verfasst: 23.07.2007 21:48
von HeX0R
marco2006 hat geschrieben: ...Funkt das so?....
Jepp.
Ist default ON , siehst ja an den Konstanten im Kopf.

Normalerweise (wenn man das auch so ausliefern wollte), setzt man in den eigenen Kopf vor dem Einbinden der Include:

Code: Alles auswählen

#APP_NAME        = "Mein Programm" ;Name des Programms
#APP_VERSION     = "1.0"           ;Version des Programms
#APP_AUTOR       = "HeX0R"         ;Name des Autors
#APP_AUTOR_EMAIL = "my@mail.com"   ;Emailadresse des Autors
#USE_ON_ERROR    = #True           ;OnError an oder aus 
Dann kann dein "Kunde" dir auch per Mail den Fehlerbericht senden.

In deinem Fall natürlich uninteressant.

Verfasst: 24.07.2007 18:43
von marco2007
Echt cool, wenn ich wüßte, was die Fehlermeldung bedeutet ....

Folgende Fehlermeldung erhalte ich auf Cheffes PC:

Code: Alles auswählen

0xC0000005 
An attemped read or write to/from an address to which that process isn't allowed 

Line:2038 
Modul:Main Module 

EIP=0x43B426 
EAX=0x0 
EBX=0x9C3130 
ECX=0x43 
EDX=0x43 
EBP=0x12FFAC 
EDI=0x447C94 
SegCS=0x1B 
FFlags=0x10202 

Ich habe gestern den Code nach dem Kompilieren erweitert, sodaß Line 2038, nicht mehr Line 2038 entspricht...nochmal von vorne oder kann man daraus etwas erkennen?

Ich glaube, ich hab`s:

Code: Alles auswählen

 db = OpenDatabase(#db3, "PSP", "", "") 
  If db 
    If DatabaseQuery(#db3, "SELECT * FROM Datentest order by pspnummer")
      FirstDatabaseRow(#db3)
      If GetDatabaseString(#db3, 6)="0"
      AddGadgetItem(#combokunde, -1, GetDatabaseString(#db3, 1))
      EndIf
      While NextDatabaseRow(#db3)<>0
      If GetDatabaseString(#db3, 6)="0"
       AddGadgetItem(#combokunde, -1, GetDatabaseString(#db3, 1))
      EndIf
      Wend
   Else
      MessageRequester("Achtung", "Kann die folgende Abfrage 'PSP' nicht ausführen: "+DatabaseError())
    EndIf
  EndIf  
  !!!CloseDatabase (falsche Stelle, lieber Marco)(#db3)


Diese Datenbank ist eine Erweiterung der neue Version, ich habe die Verbindung beim Chef noch gar nicht eingerichtet...und wenn ich so blöd bin, daß ich die Datenbank schließe, obwohl ich sie gar nicht öffnen kann, dann streikt er...

DANKE

Manchmal sitzt der Bug vorm Computer des Chefs....