Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Speicherverwaltung  
Gehen Sie zu Seite 1, 2, 3  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
tobis79211
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.03.2002
Beiträge: 395
Beitrag tobis79211 Mitglied 20:08:00 13.05.2003   Titel:   Speicherverwaltung            Zitieren

Hi,
ich hab nur um kurz sicher zu gehen eine Frage:
Stimmt es, dass C++ Speicher von Arrays selbst verwaltet?
Also muss ich, oder muss ich nicht darauf achten, dass ich einen sog. "Array out of bounds"-Fehler bekomme?
Gruss, Tobias
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25896
Beitrag volkard Moderator 20:10:00 13.05.2003   Titel:              Zitieren

Zitat:
Original erstellt von tobis79211:
Hi,
ich hab nur um kurz sicher zu gehen eine Frage:
Stimmt es, dass C++ Speicher von Arrays selbst verwaltet?
Also muss ich, oder muss ich nicht darauf achten, dass ich einen sog. "Array out of bounds"-Fehler bekomme?
Gruss, Tobias


stimmt so nicht. normale arrays wie int a[100] funktionieren wie in c.
kanns aber dir selber klassen bauen, oder fremde kalssen verwenden, die speicher selber verwalten, grenzen überprüfen und was sonst noch brauchbar wäre.

_________________
ewr-dienstleister krankenversicherung
tobis79211
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.03.2002
Beiträge: 395
Beitrag tobis79211 Mitglied 20:14:00 13.05.2003   Titel:              Zitieren

hm...ok
Aber:
Warum hab ich dann kein Problem in ein Array, dass mit 5 Elementen allokiert ist, 10 Elemente zu schreiben?
Also, ich rede z.B. von einem EigeneKlasseArray[5];
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25896
Beitrag volkard Moderator 20:17:00 13.05.2003   Titel:              Zitieren

Zitat:
Original erstellt von tobis79211:
hm...ok
Aber:
Warum hab ich dann kein Problem in ein Array, dass mit 5 Elementen allokiert ist, 10 Elemente zu schreiben?
Also, ich rede z.B. von einem EigeneKlasseArray[5];

weil der speicher da ist.

C++:
int main()
{
  int arr[5];
  int x=4711;
  cout<<arr[6]<<endl;
}

mit ein wenig glück gibt das programm 4711 aus.

C++:
1
2
3
4
5
6
7
8
int main()
{
  int arr[5];
  for(int i=0;i<6;++i)/eins zu weit
    arr[i]=0;//ups, bei arr[6]=0 passiert in wirklichkeit
  //i=0
  //hübsche endlosschleife gebastelt.
}

_________________
ewr-dienstleister krankenversicherung
Gerard
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.01.2002
Beiträge: 6118
Beitrag Gerard Mitglied 20:27:00 13.05.2003   Titel:              Zitieren

verwalten und Array out of bounds sind doch erstmal zwei fragen

verwalten tut c++ arrays nicht anders als ander variablen
lokale arrays werden so wie ander variablen am ende des scopes gelöscht
dynamische arrays müssen mit new[] allociert werden und mit delete[] deallociert

zu "Array out of bounds" da wird nix zu gesagt, meistens kriegs du dann ne fehler meldung, ist aber nicht sicher
wenn du std::vector von stlport benutzt dann kriegst du aufjeden fall eine meldung

[ Dieser Beitrag wurde am 13.05.2003 um 20:28 Uhr von Dimah editiert. ]
tobis79211
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.03.2002
Beiträge: 395
Beitrag tobis79211 Mitglied 20:32:00 13.05.2003   Titel:              Zitieren

ok, danke!
Also wird dann einfach im Speicher auf das nächste gezeigt, auch wenn das schwachsinn ist?
Wie allokiere ich denn Speicher in C++?
Auch einfach mir realloc ?? (doof gefragt...)
Gerard
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.01.2002
Beiträge: 6118
Beitrag Gerard Mitglied 20:35:00 13.05.2003   Titel:              Zitieren

mit new und delete bzw. bei arrays new[] und delete[] http://www.fun-soft.de/Download/EBook/cplusplus/kap08.html#70357
Shade Of Mine
Moderator

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 19011
Beitrag Shade Of Mine Moderator 20:35:00 13.05.2003   Titel:              Zitieren

Zitat:
Original erstellt von tobis79211:
Also wird dann einfach im Speicher auf das nächste gezeigt, auch wenn das schwachsinn ist?

jep
Zitat:
Wie allokiere ich denn Speicher in C++?

new, new[] sowie delete,delete[] zum freigeben
siehe dein lieblings c++ buch

_________________
A language that doesn't affect the way you think about programming is not worth knowing.
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 25896
Beitrag volkard Moderator 20:38:00 13.05.2003   Titel:              Zitieren

Zitat:
Original erstellt von tobis79211:
Wie allokiere ich denn Speicher in C++?

zum beispiel mit int arr[5];
was willste genau? ein array, das die größe ändern kann? wenn eins ausreicht, das automatisch nach bedarf wachsen kann, dann wäre std::vector geeignet.
C++:
vector<int> v;
for(int i=0;i<5;++i)
  v.push_back(i*i);//v wächst jeweils um eins
for(int i=0;i<5;++i)
  cout<<v[i]<<endl;
//gibt 5 quadtratzahlen aus.

_________________
ewr-dienstleister krankenversicherung
tobis79211
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.03.2002
Beiträge: 395
Beitrag tobis79211 Mitglied 20:42:00 13.05.2003   Titel:              Zitieren

ok, aber was mach ich, wenn ich ein Array "feld" mit 5 Schlüsseln habe und es erweitern muss auf 10?

C++:
feld  = new int[5];
feld2 = new int[10];
for(int i=0;i<5;i++) feld2[i] = feld[i];
delete feld;
feld = new int[10];
feld = feld2;
delete feld2;


????
Kann das sein, oder geht das nicht schlauer??
c++.de :: C++ (auch C++0x und C++11) ::  Speicherverwaltung  
Gehen Sie zu Seite 1, 2, 3  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.