Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Variable mit new mehrmals vewenden

sheh / 3 Antworten / Baumansicht Nickles

hallo alle,
kann jamand mitr bitte sagen, wie ich
eine mit new erstellte Variable mehrmals verwenden kann, bevor ich delete einsetze??
z.B.
sig = new signed short [kanzahl];
for(int j=0;j<x;j++)
{
for(int i=0; i < y; i++)
{
wert = wird aus einer Datei gelesen
sig[i]=wert;
}
for(i=0; i< y; i++)
cout<<sig[i]<<"\t";
cout<<endl;
}

bei Antwort benachrichtigen
Dreamforger sheh „Variable mit new mehrmals vewenden“
Optionen

genau so wie du es schon beschrieben hast.
'sig' muss halt ein 'signed short*' sein.
Und die beiden 'cout...' Zeilen verdienen eigentlich eine eigene Klammerung.
'delete[] sig' kannst du direkt nach deinem geposteten Code aufrufen.
Damit du keine Speicherfehler bekommst, solltest du sicherstellen das y

bei Antwort benachrichtigen
sheh Nachtrag zu: „Variable mit new mehrmals vewenden“
Optionen

Hallo,
danke für die Antwort,

natürlich die Variable sig war als zeiger auf signed short definiert,
die erste cout in der innere Schleife ist für die horz. Ausgabe, doe wird mehrere mal ausgegeben, danach kommt die zweite cout, um neue Zeile zu beginnen, dass will ich so.

signed short* sig;
int kanzahl;// wird aus Datei gelesen

sig = new signed short [kanzahl];
for(int j=0;j {
// innere Schleife
for(int i=0; i {
wert = wird aus einer Datei gelesen
sig[i]=wert;
}
//Inhalt vom sig wir tab getrennt ausgegeben
for(i=0; i cout
// hier wird in einer neuen Zeile begonnen
cout }
//und am ende
delete [] sig:

Das Problem: nach dem ersten inneren Schleifendurchlauf ist die sig mit Werten gefüllt, bei dem nächste Durchlauf bleibt der Inhalt von sig unverändert, sig enthält die Werte vom ersten Durchlauf, aber ich möchte aber die nächsten Werten lesen!!!



?????

bei Antwort benachrichtigen
Dreamforger sheh „Variable mit new mehrmals vewenden“
Optionen

Da fällt mir fast nichts mehr zu ein, ich kann aber noch ein bischen im Trüben fischen:

Um den Fehler den du beschreibst müsste


  1. die erste Schleife nicht explizit mit (int i =0;...) sondern nur mit (int i = 0;...) beginnen. ODER
  2. "wert = wird aus einer Datei gelesen" funktioniert nicht so wie erwartet. Wird die Datei vielleicht innerhalb der äußeren Schleife zurückgesetzt


Machst du eigentlich noch was zwischen den beiden inneren for( i=0;...) Schleifen? Das du die Werte erst in "sig" speicherst und nicht gleich nach dem Lesen ausgibts legt das nahe. Vieleicht passiert ja in dem zwischenschritt was das die Daten in sig wieder plattmacht.

Wenn dem nicht so ist kannst du ja auch alternativ gleich nur eine Schleife verwenden:


for (int j = 0; j {
TYP wert = wird aus datei gelesen
cout if (j % y == (y-1)) cout }
bei Antwort benachrichtigen