003
16.05.2006, 12:02 Uhr
0xdeadbeef
Gott (Operator)
|
Der Hintergrund - zur Erklärung - ist, dass
C++: |
int x, i, vektora[i],vektorb[i], vektorc[i];
|
das hier nicht funktionieren kann. Der Compiler versucht zu erkennen, wieviel Speicher er denn jetzt für die Vektoren anfordern soll, und scheitert natürlich, weil nicht bekannt ist, was nachher in i drinstehen soll. Das ist ja an der Stelle noch nicht mal zur Laufzeit bekannt. Jetzt gibt es zwei Möglichkeiten - entweder, du forderst zur Laufzeit dynamisch von Hand Speicher an, das ist das, was ~gast gemacht hat:
C++: |
int i;
// i mit einem Wert füllen, z.B. i = 20;
int *vektora = new int[i];
// vektor benutzen, z.B.
for(int j = 0; j < i; ++j) vektora[j] = j;
// Speicher wieder freigeben, damit kein Speicherleck entsteht: delete[] vektora;
|
oder du benutzt eine Klasse aus der C++-Standardbibliothek (STL), die das für dich erledigt, z.B.
C++: |
#include <vector>
using namespace std; // das hier kann man auch weglassen, man muss dann halt vor alle STL-Bezeichner std:: schreiben
// ...
int i; i = 20; vector<int> vektora(i); for(j = 0; j < i; ++j) vektora[j] = j;
// vektora wird am Ende des Blocks zerstört, der angeforderte Speicher wird dabei automatisch freigegeben
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |