SeeksTheMoon
24-06-2003, 20:20
Ich hab ein Problem mit new in C++. Ich habe zwei Zeiger, die mal Arrays werden sollen (datenfeld und tempFeld). tempFeld soll immer 1 int größer sein als datenFeld.
In einer Schleife (die n Durchläufe hat) soll pro Durchlauf ein integer eingelesen werden und ins datenfeld geschrieben werden.
Nachdem das geschehen ist, soll das Datenfeld um 1 vergrößert werden, um im eventuellen nächsten Durchlauf die nächste Zahl aufnehmen zu können.
Die Schleife terminiert bei EOF-Zeichen.
Warum funktioniert mein Code nicht (die Felder wachsen nicht an)?
Kann new das Feld nicht automatisch vergrößern (und den bisherigen Inhalt übernehmen) so wie realloc?
Deshalb mache ich diese Kopieraktionen mit tempFeld und gebe den Speicher immer frei und lege dann einen größeren an und kopiere wieder zurück.
Das Programm geht eigentlich noch weiter; dort brauche ich das datenfeld und dessen Anzahl der Einträge.
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
int *datenfeld=new int;
int *tempFeld=new int[2];
int datenAnzahl=0;
int eingabe;
int index=0;
cout<<"Bitte gib die Zahlen ein!"<<endl;
cin >> eingabe;
while(!cin.eof())
{
datenfeld[index] = eingabe;
datenAnzahl = sizeof(datenfeld);
for(int i=0;i<sizeof(datenfeld)/sizeof(int);i++)
tempFeld[i]=datenfeld[i];
index++;
delete[] datenfeld;
datenfeld=new int[index];
for(int i=0;i<sizeof(datenfeld)/sizeof(int);i++)
datenfeld[i]=tempFeld[i];
delete[] tempFeld;
datenfeld=new int[index+1];
cin >> eingabe;
}
In einer Schleife (die n Durchläufe hat) soll pro Durchlauf ein integer eingelesen werden und ins datenfeld geschrieben werden.
Nachdem das geschehen ist, soll das Datenfeld um 1 vergrößert werden, um im eventuellen nächsten Durchlauf die nächste Zahl aufnehmen zu können.
Die Schleife terminiert bei EOF-Zeichen.
Warum funktioniert mein Code nicht (die Felder wachsen nicht an)?
Kann new das Feld nicht automatisch vergrößern (und den bisherigen Inhalt übernehmen) so wie realloc?
Deshalb mache ich diese Kopieraktionen mit tempFeld und gebe den Speicher immer frei und lege dann einen größeren an und kopiere wieder zurück.
Das Programm geht eigentlich noch weiter; dort brauche ich das datenfeld und dessen Anzahl der Einträge.
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
int *datenfeld=new int;
int *tempFeld=new int[2];
int datenAnzahl=0;
int eingabe;
int index=0;
cout<<"Bitte gib die Zahlen ein!"<<endl;
cin >> eingabe;
while(!cin.eof())
{
datenfeld[index] = eingabe;
datenAnzahl = sizeof(datenfeld);
for(int i=0;i<sizeof(datenfeld)/sizeof(int);i++)
tempFeld[i]=datenfeld[i];
index++;
delete[] datenfeld;
datenfeld=new int[index];
for(int i=0;i<sizeof(datenfeld)/sizeof(int);i++)
datenfeld[i]=tempFeld[i];
delete[] tempFeld;
datenfeld=new int[index+1];
cin >> eingabe;
}