| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
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 ...
![]() |
| | #1 (permalink) |
| Registriert seit: 13.02.06 ![]() Likes: 1 | 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;
} den Speicher freigegeben habe sollte ja der Wert auf 0 stehen jedoch: Im bild zu sehen: Wieso ist pointer2 nicht auf 0? |
| | |
| | #2 (permalink) |
| Registriert seit: 30.05.05 ![]() Likes: 0 | 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. |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 13.02.06 ![]() Likes: 1 | 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 |
| | |
| | #4 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | vielleicht kann ja jemand aus ANSI C++ oder ähnlichem zitieren Zitat:
und zwischen Code: delete pointer2; und cout << "Wert von pointer2: " << *pointer2 << "\n"; 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. | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |