Tagchen,
weiss vielleicht jemand wie man einen Array leert?
Mein Problem liegt darin, das ich je nach Gebrauch nur eine gewisse Anzahl von Felder (hmm, sagt man da Felder zu???) des Arrays brauche.
Wenn ich nun aber beim ersten Gebrauch z.B. 7 Felder fülle und beim zweiten Durchlauf nur 6 benötige, behält das 7. Feld den Inhalt vom ersten Durchgang. Und das ist ziemlich schlecht.
Ich hoffe ich habe mein Problem genau genug beschrieben.
Vielleicht weiss ja auch jemand wie man es in PHP oder Java macht. Evtl. könnte man es dann ja auch bei C++ verwenden. Bin für jede Antwort dankbar.
PLZ :help
Array leeren in C++
-
-
- Offizieller Beitrag
öhm weiss zwar weder wie man das in php java oder sonstwo mach aber schreib doch einfach in das feld dann eine 0 rein...
: drink
-
Wuah, C++ mit PHP oder Java vergleichen, BLASPHEMIE!
Aber mal im Ernst: Das kann man nicht so leicht übertragen. In C++ kannst du und sollst du und wirst du mit Pointern arbeiten. Also Zeiger auf einen bestimmten Speicherbereich. Das ist in PHP und Java unmöglich. Und ein Array ist ja - zumindest in C - nichts anderes als ein Zeiger auf eine Folge von Datenobjekten im Speicher. Die eckigen Klammern ([x]) stellen also eigentlich eine Zeigeroperation dar, nämlich den Zugriff auf das x-te Objekt im Speicherbereich dieses Arrays.
Wie du jetzt mit deinem Arrayproblem umgehst, ist ganz vom Programmierkontext abhängig. Entweder du erstellst ein Array mit fester, ausreichend großer Anzahl an Objekten und ignorierst dann die nicht benötigten. Oder du füllst den gesamten Speicherbereich des Arrays vor jedem Gebrauch mit 0x00 (z.B. mit ZeroMemory(arrayname, sizeof(arrayname))). Eine weiter Möglichkeit wäre, das Array dynamisch zu allokieren und zu deallokieren.
Beispiel:
Code
Alles anzeigenint main() { int *myarray; // Array allokieren (30 Felder) myarray = (int *)calloc(30, sizeof(int)); assert(myarray); /** mit dem Array arbeiten ... **/ // Array deallokieren ( !wichtig, nicht vergessen! ) free(myarray); // erneut allokieren (20 Felder) myarray = (int *)calloc(20, sizeof(int)); assert(myarray); /* ... */ // und den Speicher wieder freigeben free(myarray); }
calloc(x,y) allokiert ganz einfach ein Array im Speicher mit x Feldern der Größe y und gibt einen Zeiger darauf zurück. Zuvor setzt es noch den gesamten Speicherbereich des Arrays auf 0x00. Der Aufruf von free() ist deshalb so wichtig, weil damit dieser Speicherbereich wieder freigegeben wird, d.h. das Betriebssystem weiß damit, dass es diesen Speicher wieder verwenden und evtl. an andere Programme vergeben darf. Macht man dies nicht, konsumiert dein Programm mit der Zeit immer mehr Speicher, und das wäre ja nicht der Sinn und Zweck der Sache.
Na ja, vielleicht solltest du dich auch mal intensiv mit Zeigern beschäftigen, ich wüsste da ein paar gute Tutorials
HTH,
reima -
Hi,
oh man, das ist mir zu hoch.
Ich hab von Pointern leider wirklich noch keine grosse Ahnung. Deshalb habe ich jetzt einfach sämtliche Inhalte des Arrays mit folgendem überschrieben.CodetheColorName[0] = _T(\"\"); theColorName[1] = _T(\"\"); theColorName[2] = _T(\"\"); theColorName[3] = _T(\"\"); theColorName[4] = _T(\"\"); theColorName[5] = _T(\"\"); theColorName[6] = _T(\"\"); theColorName[7] = _T(\"\");
Das ist zwar mit Sicherheit nicht die eleganteste Lösung, aber da mein Array nur diese bestimmte Grösse hat und es damit jetzt funktioniert werde ich es erstmal dabei belassen.Aber es wäre trotzdem nett wenn du mal ein paar Links für Tutorials hier posten könntest. Dann werde ich es mir bei Gelegenheit mal genauer anschauen.
Thx -
Allgemein kann ich da die Site
empfehlen. Da gibt's unter anderem Links zu C- und C++-Tutorials. Darunter sind auch einige sehr gute deutsche.
So z.B. Volkhards C++-Kurs (http://www.volkard.de/vcppkold/vcppk.zip). Dort wird eingentlich so gut wie alles erläutert, von den einfachsten Anweisungen bis zu Hardcore-OOP.