Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » 0xC0000005/Access Violation -->häää?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.05.2004, 10:23 Uhr
~Unwissende
Gast


Hallo,
ich finde einfach den Fehler nicht...
der Debugger meckert wegen einer Access Violation (0xC0000005) wenn ich den Button "Test abbrechen" auf der GUI drücke.
Lasse ich die *.exe laufen kommt folgende Fehlermeldung:
"Die Anweisung in 0x00403a4b" verweist auf Speicher in 0x00000314. Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
Der Debugger meldet sich bei folgendem Quelltextstück:

C++:
void msp2_brd::Get(UINT32 offset, UINT32 *val)
{
    UINT32 *raddr;
    UINT32 tst;

    raddr = FPGA_address;
    raddr += offset/4;

    *val = *raddr; //nach dieser Zeile Fehlermeldung: Unbehandelte Ausnahme 0xC0000005
    tst = *val;
}
FPGA_address gehört natürlich auch zur Klasse msp2_brd:



C++:
class msp2_brd
{
protected:
    // is board initialised
    bool    initialised;

    // Base adress for direct memory access in loacal area for PLX registers;
    UINT32    *BAR0_address;

    // Base adress for direct memory access;
    UINT32    *base_address;

    // Range for memory access;
    UINT32    range;

    // Base adress for direct memory access in loacal area for FPGA registers;
    UINT32    *FPGA_address;

    
    // PCI board handler
    HANDLE    pci_hd;

    
    
public:
    msp2_brd();
    ~msp2_brd();

    virtual void  Read(UINT32 offset, UINT32* dst, UINT32 anz);
    virtual void  Write(UINT32* src, UINT32 offset, UINT32 anz);
    virtual void  WriteRead(UINT32* w_p, UINT32* r_p, UINT32 anz);
    virtual void  Get(UINT32 offset, UINT32 *val);
    virtual void  Put(UINT32 offset, UINT32 val);
    virtual void  Info(HANDLE* hWD, UINT32* adr, UINT32* rng);
    virtual void  GetBaseAdr(UINT32* adr1, UINT32* adr2, UINT32* adr3);
    };


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.05.2004, 10:26 Uhr
~mike
Gast


Hi!
sind val oder raddr NULL? Füg mal vorher einen ASSERT ein

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.05.2004, 10:38 Uhr
~Unwissende
Gast


jetzt hab ich mal geschaut, was der Inhalt der Variablen ist:
(Haltepunkt in der Linie von):

C++:
*val = *raddr;


also:
FPGA_address=0x00000000 Fehler: Ausdruck kann nicht ausgewertet werden
raddr= 0x00000314 Fehler: Ausdruck kann nicht ausgewertet werden
offset= 788
val=3435973836 (deizmal)

Irgendwie hängt es an der

C++:
FPGA_address


aber wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.05.2004, 10:46 Uhr
~mike
Gast


Hi!
Hmm. Nur zur Sicherheit: Füg TRACE("Werte -> %p %p",val,raddr); ein.
Dann führ das Programm im Debug Modus aus. Im Debug Fenster sollten dann die Adressen erscheinen.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.05.2004, 10:55 Uhr
Tommix



Hallo,

Zitat:

FPGA_address=0x00000000


Sicher, dass das richtig ist?

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.05.2004, 11:03 Uhr
~Unwissende
Gast


TRACE geht anscheinend nur im Debug-Modus..
Erstellen->Debug starten->Ausführen?!?!?
Geht aber nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.05.2004, 11:59 Uhr
~mike
Gast


ja, TRACE geht nur im Debug Modus. Du musst unten im Eingabefenster suchen. Da steht dann Werte -> bla bla

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.05.2004, 12:20 Uhr
ao

(Operator)


Wird denn der Pointer FPGA_address initialisiert? Dass der auf NULL zeigt, ist sicher falsch. Sind die anderen Membervariablen irgendwie sinnvoll ausgefüllt, besonders das "initialised"?

Poste doch mal den Code, der die Instanz von msp2_brd erzeugt und initialisiert und den, der die Get-Methode aufruft.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.05.2004, 12:24 Uhr
~Unwissende
Gast


@Tommix:
Wenn ich im Debug-Modus durchgehe kommt die Fehlermeldung

Code:
*FPGA_address    CXX0017: Fehler: Symbol "FPGA_address" nicht gefunden


Daher kommt,denke ich "FPGA_address= 0x000 000 0"...

Vielleicht liegts daran, dass der Compiler noch keine "FPGA_adress" hat, da keine Hardware dranhängt...
aber komischerweise gingen die Vorgängerversionen des Programmes auch ohne Hardware, zumindest ist nichts abgestürzt...*grübel*
Ich probiers jetzt erstmal mit Hardare...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: