![]() |
[C++] Zeiger
Hi,
ich habe ein kleines problem wegen zeigern.
Delphi-Quellcode:
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.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 |
Re: [C++] Zeiger
Mit
Code:
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
*doshdr->e_lfanew
Code:
, oder umständlicher
doshdr->e_lfanew
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 :stupid: |
Re: [C++] Zeiger
Zitat:
|
Re: [C++] Zeiger
Zitat:
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; ). |
Re: [C++] Zeiger
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.
|
Re: [C++] Zeiger
Hi oregonghost
doshdr war immer 0. Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz