Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » delete verursacht Absturz?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
07.12.2003, 19:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Hmm - wenn dann wieder 1024 bytes verwendet werden kann ich doch gleich alles ohne new schreiben!


so isses. New verwendest du wenn du zur compilzeit noch nicht weisst vieviel speicher du benötigst. Wenn du sowieso ein array fester grösse verwendest ist es glatt fast dämlich new zu verwenden


Zitat:

Geht das nicht irgendwie so, das nur die tatsächliche Stringlänge verwendet wird?


Ja geht schon aber du musst du dann eine art speichermanagment betreiben auf das keiner bock hat und den aufwand meist nicht rechtfertigt.
Du müsstest entweder schon wissen wieviel du brauchst und dann entsprechend allokieren oder nachallokieren falls dein speicher nicht reicht.
wenn du c++ verwendest gibt schon fertige klassen die dir die arbeit abnehmen. Schau dir mal die STL an std::string und std::vector sollten sowas sein was du suchst
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
07.12.2003, 19:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Kann es sein das man dazu einen Doppelpointer braucht?


nein brauchst du nicht du musst nur vor dem kopieren/einlesen der zeichen wissen wie gross dein string ist und dann entsprechend speicher allokieren...
wenn du das nicht weisst kommst du ums "nachallokieren" nicht drum herum
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
07.12.2003, 19:56 Uhr
Pablo
Supertux
(Operator)



Zitat:
~newbie postete
Der String soll nur so viel Speicher verbrauchen, wie er lang ist (unter Berücksichtigung des Stoppbytes natürlich)



Unter C ist das wesentlich schwieriger als unter C++. Wie @Windalf schon sagte, du musst allokeiren oder nachallokieren oder auch die Länge der Bytes verkürzen. Aber das ist einfach viel zu viel Arbeit für ein Paar Bytes. Wenn du sowas machen würdest, und jedes Element des Arrays meinetwegen 1024 Bytes brüchten und ein Array mit der Dimension 1000 erstellt, dann könnte ich das verstehen, denn was wäre grad 1 MB. Aber wenn es nur um Strings geht, mit 20 oder 30 Bytes extra kann man leben.

Wenn du das auf jeden Fall machen willst, dann benutze die STL Klasse string, die macht das für dich.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 07.12.2003 um 19:57 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
07.12.2003, 20:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Wenn du das auf jeden Fall machen willst, dann benutze die STL Klasse string, die macht das für dich.


wobei man hierbei auch sagen muss das diese einen overhead mit sich führen.
wofür brauchst du das denn mit den möglichst super sparsamen allokierungen. Willst du einen Microproszessor programmieren? An sonsten macht das für mich keinen Sinn...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 07.12.2003 um 20:04 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
08.12.2003, 08:49 Uhr
ao

(Operator)



Zitat:
~newbie postete
Der String soll nur so viel Speicher verbrauchen, wie er lang ist (unter Berücksichtigung des Stoppbytes natürlich)


Dann müsstest du ihn vorher messen, etwa so:

C++:
char * pszWork = new char [strlen ("Hallo Welt") + 1];
strcpy (pszWork, "Hallo Welt");


Wobei man natürlich solche Konstanten möglichst nie mehrfach im Programm auftauchen lässt, sondern entweder mit #define ein Symbol draus macht oder eine const-Variable deklariert. Ist klar, warum?

Das Mischen von C und C++ ist zum Beispiel da kritisch, wo auf Resourcen zugegriffen wird (Dateien, Bildschirm, ...), z.B. buntes Abwechseln von printf und cout. Es ist nämlich nicht garantiert, dass beide Funktionen so mit der Resource Bildschirm umgehen, dass die jeweils andere mit dem Zustand, den sie vorfindet, klarkommt.

Und eigentlich ist nicht das Mischen von C und C++ das Problem, sondern die gemischte Verwendung von untereinander konkurrierenden Bibliotheksfunktionen. Das kann auch in reinen C- oder reinen C++-Programmen der Fall sein.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: