Pointer Adresse wird als Oktal ausgegeben
-
Hallo, wenn ich einen Pointer auf eine Variable setz, und die genaue Adresse der Variable im Ram wissen will bekomm ich eine Oktal Zahl, welche sich nicht direkt in einen neuen Pointer eintragen lassen kann, drum muss ich die Oktal Zahl in ne Hexadezimal umwandel, aber wie.
Ich habe ein TUT gelesen, und den Code so geschrieben wie im TUT, und die bekommen ne Hexadezimal und ich ne Oktal, was mach ich falsch?Hier der Code + Ergebnis:
int Var1=13; int *pVar1=&Var1; cout << "*pVar1:\t" << *pVar1 << "\n"; cout << "pVar1:\t" << pVar1 << "\n\n\n";*pVar1: 13
pVar1: 0015F7F8Normalerweiße müsste da doch jetzt 0x64218 oder so stehen, welche ich dann weiterverarbeiten kann, aber was jetzt?
Vor allem weil ich alles so wie im TUT gemacht hab.Bitte helft mir, wäre euch sehr dankbar, komm echt nicht weiter.
Gruß PSPfreak20072
-
Wer sagt, dass das Oktal ist?
Das sieht für mich sehr nach Hex aus, auch wenn das 0x fehlt..
-
0015F7F8 ist doch eine Hexadezimalzahl! Oktalzahlen gehen nicht bis F. Was bringt dich denn zu der Annahme? Das fehlende "0x"? Dann mach's so:
cout << "pVar1:\t0x" << pVar1 << "\n\n\n";
-
_matze schrieb:
0015F7F8 ist doch eine Hexadezimalzahl! Oktalzahlen gehen nicht bis F. Was bringt dich denn zu der Annahme? Das fehlende "0x"? Dann mach's so:
cout << "pVar1:\t0x" << pVar1 << "\n\n\n";Dann wird aber auch (falls es so wäre) aus einer Oktalzahl eine Hex-Zahl.

@PSPfreak20072
Wie der Name andeutet, geht Oktal bis 8 und Hexadezimal bis 16 (blöderweise gibt es in unserer Sprache aber leider nur 10 Ziffern, darum wird halt auf das Alphabet ausgeweitet).
btw:
Du hast im Ernst noch eine PSP?! - Die habe ich schon lange nicht mehr gesehen.. Die sind doch schon lange out..
-
Aha okay nun ja wo anderst hat man mir das so gesagt, aber jetzt weiter,
wenn ich jetzt die Adresse (mit dem 0x002BF948) hab wie kann ich die dann nem Pointer zuweißen, sodass dieser die Variable manipulieren kann, weil mit:int *pVar1=0x002BF948;geht das nicht. Aber wie kann ich dann nem Pointer direkt mit ner Adresse wie 0x002BF948 ansprechen? Und belegen?
Dankende Grüße PSPfreak20072
Edit: Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Das ist der fehler wenn ich es so mache wie in dem Code, will des wissen, weil in meinem TUT nich weiter darauf eingegangen wird.
-
Direkt "Adressenliterale" zuzuweisen, ist ja normalerweise auch Quatsch. Du möchtest dich doch immer auf eine Variable beziehen, und deren Adresse bekommst du über den Adressoperator "&".
Btw, wenn du auf die Fehlermeldung hörst und den Cast durchziehst (reinterpret oder C-Cast), dann klappt die Zuweisung sicher. Ob das eine gute Idee ist, steht auf einem anderen Blatt...
-
Kleine Ergänzung:
Was dein Compiler meint, ist Folgendes:
int *pVar1=(int*)0x002BF948; //dein int-Wert wird nach int* gecastet (C-Cast) int *pVar1=reinterpret_cast<int*>(0x002BF948); //dasselbe als C++-reinterpret-CastDann passen die Typen zusammen und die Zuweisung dürfte klappen. Ist aber nicht so gut, wenn du da einfach irgendeine Adresse zuweist, gibt's ganz schnell eine Zugriffsverletzung...
-
_matze schrieb:
Dann passen die Typen zusammen und die Zuweisung dürfte klappen. Ist aber nicht so gut, wenn du da einfach irgendeine Adresse zuweist, gibt's ganz schnell eine Zugriffsverletzung...
Und man sollte nicht auf die Idee kommen, dass man auf diese Weise auf den echten Arbeitsspeicher zugreift. (bei einem modernen OS). Das sind normalerweise immer nur virtuelle Adressen, die dann vom OS in die physikalische Adresse umgerechnet wird. Wenn man auf den wirklichen Speicher zugreifen will, respektive auf den eines anderen Programmes, muss man mit dem OS sprechen.
Für Windows findest du das hier in dem Bereich:
http://msdn.microsoft.com/en-us/library/aa366779(VS.85).aspx
-
THX hat mir sehr geholfen werde gleich mal versuchen, ich schreib dann nochmal.
@Drakon: PSP out? nicht mit C++ guck dir doch mal die ganzen proggis für PSP an?? fällt dir sicher was auf... *HUST* C++ *HUST*
Bis gleich probiers ma aus
Edit: Und warum gibt es dann die Zugriffsverletzung wenn ich den Wert der Variable der auf dieser Adresse gespeichert ist lesen will? wie kann ich an die Variable rankommen?
Grüße
-
Ich weiß übrigens nicht so recht, warum du 2 Threads aufgemacht hast. Ist doch das gleiche Thema, aber na ja...
-
drakon schrieb:
Wer sagt, dass das Oktal ist?
niemand. er hat nicht verstanden, was ich ihm sagen wollte.
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1655155.html#1655155
-
Also warum hab ich dann jetzt die Zugriffsrechtsverletzung? und wie kann ich die umgehn? oder kann ich nicht auf die Variable eines anderen Programms (Auch Konsolenanwendung) zugreifen und dieße manipulieren? Ich hab ja die Adresse der int Var1, aus dem Programm welches nur die Variable erstellt, und die Adresse auf dem Bildschirm ausgibt, wenn ich jetzt im Quellcode vom zweiten Prgramm die Adresse einsetze, dann müsste ich dieße doch dann manipulieren können oder?
Grüße PSPfreak
-
PSPfreak20072 schrieb:
Also warum hab ich dann jetzt die Zugriffsrechtsverletzung? und wie kann ich die umgehn? oder kann ich nicht auf die Variable eines anderen Programms (Auch Konsolenanwendung) zugreifen und dieße manipulieren? Ich hab ja die Adresse der int Var1, aus dem Programm welches nur die Variable erstellt, und die Adresse auf dem Bildschirm ausgibt, wenn ich jetzt im Quellcode vom zweiten Prgramm die Adresse einsetze, dann müsste ich dieße doch dann manipulieren können oder?
Grüße PSPfreak
Schau mal meinen letzten Beitrag an.. Den habe ich in weiser Voraussicht verfasst.. Du ihn aber anscheinend nicht gelesen..

-
Schau mal meinen letzten Beitrag an.. Den habe ich in weiser Voraussicht verfasst.. Du ihn aber anscheinend nicht gelesen..

Doch hab ich, aber wenn das wrklich nicht geht, dann hat sich jetzt alles, aber war nich ganz sicher was jetzt als ergebnis bei meinem Pointer raus kommt, aber das hat sich ja jetzt erledig.
DANKE PSPfreak
-
PSPfreak20072 schrieb:
Schau mal meinen letzten Beitrag an.. Den habe ich in weiser Voraussicht verfasst.. Du ihn aber anscheinend nicht gelesen..

Doch hab ich, aber wenn das wrklich nicht geht, dann hat sich jetzt alles, aber war nich ganz sicher was jetzt als ergebnis bei meinem Pointer raus kommt, aber das hat sich ja jetzt erledig.
DANKE PSPfreak
Gehen tut es schon, nur nicht auf die Art, wie du es versuchst. Du hast lediglich einen virtuellen Speicherbereich, der vom OS verwaltet wird. Alleine mit C++ kommst du da nicht ran (was auch gut so ist, denn das hat eine Sprache direkt nichts zu interessieren). Da musst du schon den Umweg über eine OS-API machen.
-
Naja hab nur gedacht, da das in meinem TUT o komisch geschrieben war dass das geht, und das mit der oct und hex das war pure Verwirrung, habs aber verstanden, und bin bereit weiter zu machen!
Cya PSPfreak
-
Wird da wirklich vorgeschlagen, vorgegebene Adressen zuzuweisen? Vielleicht solltest du dir überlegen, ob du mit dem Tutorial etwas lernst...
-
Nexus schrieb:
Wird da wirklich vorgeschlagen, vorgegebene Adressen zuzuweisen? Vielleicht solltest du dir überlegen, ob du mit dem Tutorial etwas lernst...
Vor allem, wenn es noch aus Zeiten kommt, als das mit dem direkten Zugriff auf den Speicher noch ging.(mit lediglicher Zeigerarithmetik)

-
Naja das Buch ist echt alt das stimmt, aber die Grundlagen sind fast dieselben, und da lernt man des schon schnell, UND ES IST UMSONST!
MfG PSPfreak
-
PSPfreak20072 schrieb:
Naja das Buch ist echt alt das stimmt, aber die Grundlagen sind fast dieselben, und da lernt man des schon schnell, UND ES IST UMSONST!
MfG PSPfreak
Klar, Grundlagen sind Grundlagen, aber auch eine Programmiersprache entwickelt sich weiter und da ändern sich unter Umständen auch mal die Grundlagen.
Was aber auch wichtig ist, dass man sich dann nicht vollständig auf das Buch verlässt, sondern auch immer mal wieder nachschaut, was denn so aktuell ist.Und es gibt auch aktuelle Bücher umsonst.

z.B hier:
http://salaswildthoughts.blogspot.com/2008/06/thinking-in-c-download-free-ebook.html
-
Drum gibt es och nette Menschen in einem neten Forum, welche alle auf ein schönes Frage Antwort Spiel warten. Nein Spaß ja klar, verlass ich mich ja auch nicht, aber wenn alle noch im vc++ 2008 funktioniert, dann ist doch okay, bei größeren Fehlern, (gab noch keine!) würde ich dann soetwas vorziehen.