AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] Zeiger

Ein Thema von Mark90 · begonnen am 27. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Mark90
(Gast)

n/a Beiträge
 
#1

[C++] Zeiger

  Alt 27. Aug 2007, 11:45
Hi,

ich habe ein kleines problem wegen zeigern.

Delphi-Quellcode:

         ExeFile E;
    PIMAGE_DOS_HEADER doshdr; // Zeiger auf IMAGE_DOS_HEADER
    long e_lfanew;

    this->OpenDialog1->Execute(); // opendialog starten
    E.SetFileName(this->OpenDialog1->FileName);//In meiner ExeFile Klasse DATEInamen setzten
    doshdr = new IMAGE_DOS_HEADER; // speicher reservieren
    doshdr = E.Search_Dos_Header();// zeiger auf dosheader bekommen(Suchen in datei an Mappaddresse)
    e_lfanew = *doshdr->e_lfanew;// e_lfanew zuweisen
e_lfanew = *doshdr->e_lfanew;// e_lfanew zuweisengenau hier tritt das problem auf. es kommt eine fehlermeldung, invalid direction. Aber normalerweise müsste das doch funktionieren. in delphi war es immer so, dass wenn man auf den inhalt eines typs zugreifen wollte musste man dereferenzieren Var^ und in C++ eben *var.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: [C++] Zeiger

  Alt 27. Aug 2007, 12:06
Mit
Code:
*doshdr->e_lfanew
greifst du auf das Element e_lfanew in doshdr zu, und dann dereferenzierst du dieses Element. Du derefenzierst mit dem Sternchen e_lfanew, nicht doshdr, und e_lfanew ist vermutlich kein Zeiger, sondern ein long (rate ich jetzt mal, ohne die Struktur zu kennen). Der Pfeil in C++ bewirkt bereits eine Derefenzierung. Um auf ein Element einer Struktur zuzugreifen, die du als Objekt und nicht als Zeiger hast, benutzt man in C++ den Punkt. Korrekt wäre also entweder
Code:
doshdr->e_lfanew
, oder umständlicher
Code:
(*doshdr).e_lfanew
.

Edit:
Das, was Muetze01 schreibt, hat zwar nichts mit deinem Problem zu tun, ist aber ebenfalls etwas, was dir Kopfschmerzen ersparen könnte, weil du so ein Memory-Leak hast
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: [C++] Zeiger

  Alt 27. Aug 2007, 12:08
Zitat von Mark90:
Delphi-Quellcode:
    doshdr = new IMAGE_DOS_HEADER; // speicher reservieren
    doshdr = E.Search_Dos_Header();// zeiger auf dosheader bekommen(Suchen in datei an Mappaddresse)
btw: warum alloziierst du hier Speicher um ihn dann auf was anderes zeigen zu lassen? Damit hast du keine Referenz mehr auf den alloziierten Speicherblock. Dann kannst du dir das ganze new Gedönse auch sparen...
  Mit Zitat antworten Zitat
Mark90
(Gast)

n/a Beiträge
 
#4

Re: [C++] Zeiger

  Alt 27. Aug 2007, 13:03
Zitat von OregonGhost:
Mit
Code:
*doshdr->e_lfanew
greifst du auf das Element e_lfanew in doshdr zu, und dann dereferenzierst du dieses Element. Du derefenzierst mit dem Sternchen e_lfanew, nicht doshdr, und e_lfanew ist vermutlich kein Zeiger, sondern ein long (rate ich jetzt mal, ohne die Struktur zu kennen). Der Pfeil in C++ bewirkt bereits eine Derefenzierung. Um auf ein Element einer Struktur zuzugreifen, die du als Objekt und nicht als Zeiger hast, benutzt man in C++ den Punkt. Korrekt wäre also entweder
Code:
doshdr->e_lfanew
, oder umständlicher
Code:
(*doshdr).e_lfanew
.

Edit:
Das, was Muetze01 schreibt, hat zwar nichts mit deinem Problem zu tun, ist aber ebenfalls etwas, was dir Kopfschmerzen ersparen könnte, weil du so ein Memory-Leak hast
hi oregonghost,

das was du vorgeschlagen hast habe ich auch schon probiert. leider produziert er da eine Access violatio, die genau hier auftritt: ( e_lfanew = (*doshdr).e_lfanew; ).
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: [C++] Zeiger

  Alt 27. Aug 2007, 13:15
Dann zeigt doshdr wohl nicht auf einen gültigen Speicherbereich. Vielleicht ist es auch einfach 0. Guck dir zu diesem Zeitpunkt doshdr doch mal im Debugger an. Außerdem solltest du besser die Pfeil-Variante als die mit dem Stern benutzen, auch wenn sie im Endeffekt identisch sind.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Mark90
(Gast)

n/a Beiträge
 
#6

Re: [C++] Zeiger

  Alt 27. Aug 2007, 14:06
Hi oregonghost

doshdr war immer 0. Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz