new & delete
-
volkard schrieb:
nein. an
//#define BIL _clearscreen(_GCLEARSCREEN)erkennt man, daß es eine aufgabe der Studiengemeinschaft Darmstadt ist und da gilt die spielregel: man darf keine sprachmittel verwenden, die noch nicht offiziell vorgestellt wurden.
In dem Fall mein Vorschlag - sagt eurem Lehrer, daß er euch den Umgang mit der STL erklären soll

(ich sehe solche Probleme eher von der praktischen Seite - was die Aufgabe löst, wird verwendet)
-
Aber aktuelle Header und n korrektes main zu benutzen ist wohl nicht verboten, oder
?//Neue C++ - Header #include <iostream> #include <string> //Neue C - Header #include <ctdlib> using namespace std; int main() { //... return 0; }MfG
GPC
-
Mit
char* pstring1[30];definierst du einen array mit 30 Zeigern auf einen char (30 strings), was du sicherlich
nicht haben willst.2 Möglichkeiten:
char* pstring1 = new char[30];Dann hast du einen Zeiger auf einen char, also einen String.
Diesen mußt du dann mitdelete pstring1wieder freigeben.
Besser:
char pstring1[30];Damit hast du ein lokales, 30-Zeichen fassendes array (auch string), das
du nicht freigeben mußt
-
Leroy42 schrieb:
char* pstring1 = new char[30];Dann hast du einen Zeiger auf einen char, also einen String.
Diesen mußt du dann mitdelete pstring1wieder freigeben.
eher mit
delete [] pstring1;MfG
GPC
-
CStoll schrieb:
volkard schrieb:
nein. an
//#define BIL _clearscreen(_GCLEARSCREEN)erkennt man, daß es eine aufgabe der Studiengemeinschaft Darmstadt ist und da gilt die spielregel: man darf keine sprachmittel verwenden, die noch nicht offiziell vorgestellt wurden.
In dem Fall mein Vorschlag - sagt eurem Lehrer, daß er euch den Umgang mit der STL erklären soll

(ich sehe solche Probleme eher von der praktischen Seite - was die Aufgabe löst, wird verwendet)
[quote]
nein, elabätsch nicht Studiengemeinschaft Darmstadt :p
-
Hallo an alle Helferlein,
ich habe zwischenzeitlich noch gearbeitet, bevor Eure Hilfe kam und hier mein Erg.
Kann man so auch???
Bitte um Resonanz
#include <iostream.h> #include <graph.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> //#define BIL _clearscreen(_GCLEARSCREEN) /******************Hauptfunktion*************************************/ int main(void) { char string1[70]; char string2[70]; char string3[70]; int *z_dynam = NULL; //BIL; z_dynam = new int[70]; cout << "\n\n\n\nGeben Sie bitte den ersten String ein: \n"; cin >> string1; cout << "\nGeben Sie bitte den zweiten String ein: \n"; cin >> string2; cout << "\nGeben Sie bitte den dritten String ein: \n"; cin >> string3; cout << "\n\tDer erste String lautet: \n\t" << string1; cout << "\n\tDer zweite String lautet: \n\t" << string2; cout << "\n\tDer dritte String lautet: \n\t" << string3; delete z_dynam; getch(); return(0); }
-
Erstens: Was machst du eigentlich mit z_dynam? (außer Anlegen und wieder freigeben)
Zweitens: delete**[]** - bitte (delete ist nicht für Arrays, sondern für Einzelobjekte gedacht)
-
Und was ist damit??? LEUTE

#include <iostream.h> #include <conio.h> #include <stdio.h> #include <string.h> void main(void) { char *z_dynam; char string1[40]; char string2[40]; char string3[40]; int laenge; { cout << "\n\n\nGeben Sie string1 ein: \n"; cin >> string1; cout << "\nGeben Sie string2 ein: \n"; cin >> string2; cout << "\nGeben Sie string3 ein:\n"; cin >> string3; z_dynam = new char[laenge+1]; /* Dynam.Speicher erzeugen */ cout <<"\nDie eingegebene Strings Sind: \n"; strcpy(z_dynam,string1); /* Strings nach dynam spei kop */ cout << "\n\n\ndie1.STR "<<z_dynam; /* u. Ausgabe */ strcpy (z_dynam,string2); cout <<"\ndie2.STR "<< z_dynam; strcpy (z_dynam,string3); cout <<"\ndie3.STR "<< z_dynam; } delete z_dynam; /* Speicher freigeben */ getch(); //return (0); }
-
Dort steht immernoch delete z_dynam statt delete**[]** z_dynam.
Und Du schreibst in die Variable laenge nichts rein, benutzt sie aber danach im new[] - das geht nicht gut

-
Kannst Du mir einen Tip geben, denn anhand der Bildschirmausgabe sehe ich ja keinen Unterschied!!!

Ich dachte so, aber da erhalte ich eine Fehlermeldung bei delete('delete' expression is not a pointer to data)int laenge; laenge = 40; . . . delete z_dynam[40];
-
Habe mir jetzt nicht durchgesehen was das genaue Problem ist mit der Bildschirmausgabe, aber du verwendest hier
z_dynam = new char[laenge+1]; /* Dynam.Speicher erzeugen */den Operator new[] zum allozieren von Speicher, also den Operator zum allozieren von Speicher für ein Array. Also musst du auch den Operator delete[] Aufrufen um den Speicher für dein Array wieder richtig frezugeben. Und das geht wie LordJaxom schon schrieb mit dem Operator delete[], welcher für die Freigbe von Speicher der mit new[] alloziert wurde:
delete[] z_dynam;Die Menge des freizugebenden Speichers, macht delete ganz von allein, da musst du dir keine sorgen machen.
Die Verwendung von delete (ohne []) bei Verwendung von new[] ist undefiniert und das will keiner.
Wichtig ist nur:
delete mit new und delete[] bei new[] verwenden.
-
Nun, wenn ich Deinen Tip anwende, dann bekomm ich errors's Warum???
z_dynam = new[]; /* Dynam.Speicher erzeugen */ . . . delete []; /* Speicher freigeben */#include <iostream.h> #include <conio.h> #include <stdio.h> #include <string.h> void main(void) { char *z_dynam; char string1[40]; char string2[40]; char string3[40]; int laenge; laenge = 40; { cout << "\n\n\nGeben Sie string1 ein: \n"; cin >> string1; cout << "\nGeben Sie string2 ein: \n"; cin >> string2; cout << "\nGeben Sie string3 ein:\n"; cin >> string3; z_dynam = new[]; /* Dynam.Speicher erzeugen */ cout <<"\nDie eingegebene Strings Sind: \n"; strcpy(z_dynam,string1); /* Strings nach dynam spei kop */ cout << "\n\n\nDer 1.STR "<<z_dynam; /* u. Ausgabe */ strcpy (z_dynam,string2); cout <<"\nDer 2.STR "<< z_dynam; strcpy (z_dynam,string3); cout <<"\nDer 3.STR "<< z_dynam; } delete []; /* Speicher freigeben */ getch(); //return (0); }
-
volkard schrieb:
CStoll schrieb:
Aber vielleicht solltest du besser mit std::string arbeiten

nein. an
//#define BIL _clearscreen(_GCLEARSCREEN)erkennt man, daß es eine aufgabe der Studiengemeinschaft Darmstadt ist und da gilt die spielregel: man darf keine sprachmittel verwenden, die noch nicht offiziell vorgestellt wurden.
keine Studiengemeinschaft Darmstadt
-
Es wurde doch eigentlich schon mal gepostet...

z_dynam = new[ /* hier musst du die größe eintragen */ ]; /* Dynam.Speicher erzeugen *//* Hier musst du schon angeben, _was_ er löschen soll */ delete[] z_dynam; /* Speicher freigeben */