Visual Studio Compiler und MinGW(C++)

05/09/2012 17:22 Masterfire#1
Hallo Liebe Community,
mir ist aufgefallen, dass die Kompilate von MS und MinGW im Bezug auf statische Adressen ein unterschiedliches Verhalten aufweisen. Während, wenn ich mit dem selben Code in MingGW eine Variable deklariere, sie mit Cheatengine finden und mit einer konstanten Adresse rechnen kann, geht das mit dem MS Kompilat nicht. Dynamische Adressen lassen sich natürlich z. B. trotzdem mit "new Int" erzeugen. Das MS Kompilat wechselt bei jedem Start die Adresse. Woran liegt das denn? Ich habe eigentlich eine Win32app erzeugt und somit sollte es nicht am Managed Code liegen.


Ich bin dankbar für jede Antwort ;-)
05/09/2012 17:36 xNopex#2
Beides als Release/Build/whatever kompiliert?
05/09/2012 18:08 Masterfire#3
ja habe ich getan.... ich wollte mit diesem Code
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    int* test =  new int; //Pointer zu dynamischer Adresse bzw. Allokation
    *test = 0;
    while(cin.get() != 'n'){// Schleife... Erhöhung um 1 für Cheatengine
        *test += 1;
        cout << *test;
    }
    cout << &test; // nach Ende der Schleife Ausgabe der konstanten Adresse des Pointers selbst 
    
    return 0;
}
nämlich unter MinGW testen wie das mit dynamischen Adressen funktioniert... grade weil eine einfache Int-deklaration nur eine immer konstante Adresse erzeugt. Deswegen das dynamische allokieren mit dem Pointer "test". Dann die Schleife damit man durch einfaches Enter-drücken den Wert erhöhen und mit Cheatengine suchen kann. Am ende mit cout nochmal die Ausgabe der Adresse des Pointers. Durch den Aufbau des Codes erhalte ich unter MinGW eine ständig wechselnde Adresse für meinen Wert auf die allerdings immer mein Pointer mit konstanter Adresse "test" zeigt.

Mit dem MS Kompilat reicht ein normale Int-Deklaration.... die Werte scheinen ständig zu wechseln.

Edit:
Es reicht also das:
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    int test = 0;
    while(cin.get() != 'n'){
        test += 1;
        cout << test;
    }
 
    return 0;
}
...
05/09/2012 19:03 .Dash#4
Bei mir funktioniert es! O.o
05/09/2012 19:21 Masterfire#5
Quote:
Originally Posted by .Dash View Post
Bei mir funktioniert es! O.o
Wie? Bei dir bleiben die Adressen auch bei MS statisch?