Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C++ | Zeiger Phänomen? oder eine Simple erklärung?

Diskussion: C++ | Zeiger Phänomen? oder eine Simple erklärung? im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi leute sry das ich schon wieder hier nen Thread auf mache aber ich beschäfte mich atm mit Zeigern ...

Antwort
Alt 04.01.07, 12:55   #1 (permalink)
 
Benutzerbild von b4ck
 
Registriert seit: 13.02.06
b4ck Leistung: Z3
Likes: 1
Arrow C++ | Zeiger Phänomen? oder eine Simple erklärung?

Anzeige

Hi leute sry das ich schon wieder hier nen Thread auf mache aber ich beschäfte mich atm mit Zeigern in C++ hab mir auch endlich ein RICHTIGES buch gekauft mit dem ich auch zufrieden bin ...
Nun beim Kapitel Zeiger angelangt ging es um dynamische Objekte und das man den Speicher wieder freigeben kann zB:

int* pointer = new int;
*pointer = 100;
delete pointer;

Dazu gabs ein gutes Bespiel und da ist mir was komsiches Passiert hier der Source:

Code:
//Dynamische Objekte (NEW/DELETE
#include <iostream>
using namespace std;

int main()
{
    int* pointer1 = new int;
    int* pointer2 = new int;
    int tmp;
    
    *pointer1=100;
    *pointer2=200;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    cout << "Werte Tauschen...\n\n";
    
    
    //Werte tauschen
    tmp = *pointer2;
    *pointer2=*pointer1;
    *pointer1=tmp;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    cout<<"Speicher wieder freigeben...\n\n";
    
    //Speicher wieder freigeben    
    delete pointer1;
    delete pointer2;
    cout << "Wert von pointer1: " << *pointer1 << "\n";
    cout << "Wert von pointer2: " << *pointer2 << "\n";
    cout << "Addr von pointer1: " << &pointer1 << "\n";
    cout << "Addr von pointer2: " << &pointer2 << "\n\n";
    
    system("pause>nul");
    return 0;
}
Es geht um die Letzten Zeilen.. nachdem ich mit delete pointer1; und delete pointer2;
den Speicher freigegeben habe sollte ja der Wert auf 0 stehen jedoch:
Im bild zu sehen:
Wieso ist pointer2 nicht auf 0?
Angehängte Grafiken
Dateityp: jpg zeiger.jpg (666,1 KB, 143x aufgerufen)
b4ck ist offline   Mit Zitat antworten
Alt 04.01.07, 13:30   #2 (permalink)
 
Registriert seit: 30.05.05
v01d Leistung: Facit NTK
Likes: 0
Standard

Wenn du einen Speicherbereich freigibst, in diesem fall 2*4 Bytes von dem int, ist nicht mehr garantiert dass der freigegebene Speicher auch so bleibt wie davor.
KÖNNTE ja zum beispiel sein dass die delete-routine intern nen Block reserviert, die ersten 4 Bytes auf 0 setzt und byte 5-8 dann auf den wert setzt.
v01d ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 04.01.07, 13:38   #3 (permalink)
Themenstarter
 
Benutzerbild von b4ck
 
Registriert seit: 13.02.06
b4ck Leistung: Z3
Likes: 1
Standard

ahh...
d.h. der speicher is zwar freigegeben dadurch kann es passieren das das Programm einen anderen Wert drauf ablegt?
hoffe hab des richtig verstanden danke
b4ck ist offline   Mit Zitat antworten
Alt 04.01.07, 14:52   #4 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

vielleicht kann ja jemand aus ANSI C++ oder ähnlichem zitieren . Ich verlasse mich hier auf:http://www-unix.mcs.anl.gov/dbpp/text/node52.html
Zitat:
The delete operator is used to release dynamically allocated storage
d.h es muss ja nichts danach initialsiert werden
und zwischen
Code:
delete pointer2;  
und
 cout << "Wert von pointer2: " << *pointer2 << "\n";
sind jede Menge Anweisungen (vielleicht nicht in C++ ersichtlich )
außerdem existiert auch eine Heapverwaltung, die wiederum afaik im Heap selber auch Einträge hat (k.A - es hängt von der Heapimplementierung ab, es kann auch sein, dass cout selbst noch dynamischen Speicher nutzt).
Jedenfalls: "der freigegebene Speicher hat den Programmierer nicht mehr zu kümmern" - Prinzip. Also nicht wundern
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C++ | Zeiger Phänomen? oder eine Simple erklärung?
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eine Frage bittet um Erklärung Dreamer Code Kitchen 5 22.03.09 12:01
Eine Frage bittet um Erklärung Dreamer HaBo Lounge 1 17.03.09 02:01
Brauche eine Erklärung! d3ll_s0ul Cryptography & Encryption 5 09.07.08 09:37
Eine Frechheit ... oder? Shadow94 Fun Section 8 07.03.08 22:14
ist das gruselig oder eher simple zu erklären??? *[krml]* Fun Section 4 18.11.03 22:44


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61