Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

25.01.2008, 13:37

new und delete

wieso funktioniert dieser code fehlerfrei, ohne fehlermeldung a la: "kann an speicherposition 0x000000 nicht lesen" ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main()
{
    int x = 5;
    int y = 4;

    Rechnen *WeitzeRechnetRot = new Rechnen;
    Rechnen WeitzeRechnetBlau;

    WeitzeRechnetRot->MeineFarbe("Rot");
    WeitzeRechnetBlau.MeineFarbe("Blau");

    std::cout << WeitzeRechnetRot->MeineFarbe() << std::endl;   // Rot

    std::cout << WeitzeRechnetBlau.MeineFarbe() << std::endl;   // Blau


    delete WeitzeRechnetRot;
    WeitzeRechnetRot = NULL;

            // was sollte hier normal passieren?

    std::cout << WeitzeRechnetRot->Addieren(x, y) << std::endl; // Rot

    std::cout << WeitzeRechnetBlau.Addieren(x, y) << std::endl; // Blau


    getchar();
    return 0;
}
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Beiträge: 9

Wohnort: Emsland

Beruf: Schüler

  • Private Nachricht senden

2

25.01.2008, 13:38

Nur mal so ins Blaue geschossen,
solltest du vllt Rechnen löschen?
[cpp:1]
if (leben == 0)
{
cout<<"GameOver";
}
return 0;
[/cpp:1]
(Nu)Metal(chore) RULEZ!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

25.01.2008, 13:40

Weil dein Objekt nach dem löschen noch im Speicher liegt und bei deinem nächsten Zugriff zufällig noch funktionsfähig ist. Das Ganze nennt sich "undefined behavior" (zu deutsch: undefiniertes Verhalten) und könnte genausogut in einem Programmabsturz enden.
@D13_Dreinig

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

25.01.2008, 13:43

Aber er hat doch den Zeiger nach dem Löschen sogar auf 0 gesetzt.
Das darf eigentlich gar nicht funktionieren.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

25.01.2008, 13:48

Zitat von »"David Scherfgen"«

Aber er hat doch den Zeiger nach dem Löschen sogar auf 0 gesetzt.
Das darf eigentlich gar nicht funktionieren.


Stimmt, interessanterweise macht das Visual C++ trotzdem! Aber im Grund kann Microsoft da machen was ihnen gefällt, der Standard sieht ja nicht vor was genau zu passieren hat wenn ein Null-Pointer dereferenziert wird.
@D13_Dreinig

6

25.01.2008, 14:01

Noch nicht ... (null_ptr soll kommen :) )
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

25.01.2008, 14:02

Zitat von »"Deviloper"«

Noch nicht ... (null_ptr soll kommen :) )


Ja, aber im Moment ist das Verhalten nicht vorgeschrieben, Microsofts gutes Recht also! :)
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

8

25.01.2008, 14:20

ok.. also ist das sozusagen "normal" ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

25.01.2008, 14:35

Zitat von »"$nooc"«

ok.. also ist das sozusagen "normal" ^^


Nein! Das ist nur der Weg den Microsoft mit ihrem Compiler geht. Anderswo kann das Ganze sich ganz anders auswirken.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

25.01.2008, 14:40

was genau ist den Addieren für eine funktion?
ich tippe mal drauf, dass sie auf keinen member zugreift, oder überhaupt statisch ist. das wär eine erklärung warum nichts passiert...

Werbeanzeige