Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » new spinnt, oder ich...

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 <
000
25.09.2007, 22:53 Uhr
cmos



Hallo,
ich habe ein Problem.
Wenn ich mit new ein neues char array erzeuge, wird immer mehr
angelegt als ich angebe.


C++:
char* test = new char[10];
int i = ::strlen(test);



i ist bei mir jetzt 24. Wenn ich die Größe auf 100 ändere ist i 112.
bei 210 erhalte ich 224. Wie kommt das? An Unicode, Multibyte oder sonstwas für nen character set kanns nicht liegen. bei allen 2 einstellungen habe ich diesen "Fehler".
Sowohl bei reiner kommandozeilen applikation als auch bei mfc applikationen.

Hat jemand ne idee ?
oder hab ich vielleicht was übersehen

Dieser Post wurde am 25.09.2007 um 22:54 Uhr von cmos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.09.2007, 23:09 Uhr
Pablo
Supertux
(Operator)


new spinnt nicht, du benutzt strlen aber völlig falsch. New reserviert 10 Zeichen, strlen gibt die Länge der Zeichenkette zurück (merkst du den Unterschied?). strlen macht also nicht anders als einen Zähler um 1 zu inkrementiert solange das '\0'-Zeichen nicht auftaucht. Da du test nicht initialisiert hast, dann liefert strlen etwas undefiniertes wie 24 zurück
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 25.09.2007 um 23:10 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.09.2007, 23:18 Uhr
Hans
Library Walker
(Operator)


Hi,
hat new (im Gegensatz zu malloc) nicht noch die Eigenschaft, den reservierten Speicherbereich mit 0 zu initialisieren, d.h. zu löschen??

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.09.2007, 23:30 Uhr
0xdeadbeef
Gott
(Operator)


malloc hat diese Eigenschaft auch nicht. Du meinst calloc.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.09.2007, 00:44 Uhr
xXx
Devil


Ehm und ::strlen ist ja wohl murks std::strlen ^^

C++:
char* ptr = new char[32];
ptr[31] = 0;
std::size_t len = std::strlen(ptr);
delete [] ptr;
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.09.2007, 01:31 Uhr
Hans
Library Walker
(Operator)



Zitat von 0xdeadbeef:
malloc hat diese Eigenschaft auch nicht. Du meinst calloc.

Hi,
da hast Du mich aber falsch verstanden. Meine Frage war, ob new den angeforderten Speicher löscht. Das malloc im Gegensatz dazu nur einen Bereich zuweist, sich aber nicht darum kümmert, was drin steht, ist mir bekannt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.09.2007, 01:55 Uhr
Pablo
Supertux
(Operator)



Zitat von Hans:

Meine Frage war, ob new den angeforderten Speicher löscht.


Im Prinzip hat beefy auch das geantwortet: nein
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 26.09.2007 um 01:57 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.09.2007, 08:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Hans:

Meine Frage war, ob new den angeforderten Speicher löscht. Das malloc im Gegensatz dazu nur einen Bereich zuweist, sich aber nicht darum kümmert, was drin steht, ist mir bekannt.

Hans

die meisten debugger machen das für dich wenn man gegen ein debug malloc/new linkt,

Ansonsten "nullt" nur calloc den Speicher für dich, normales malloc, new gibt dir den speicher so wie er ist - mit irgendwas gefüllt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.09.2007, 17:54 Uhr
cmos



danke für die schnellen Antworten. Ich habs heute morgen noch selber bemerkt, das es da nen unterschied gibt. _msize wäre die passendere Funktion dafür.

@xXx

::strlen funktioniert


Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.09.2007, 17:58 Uhr
xXx
Devil


@cmos: Jaaa wenn du den Header <string.h> anstelle des korrekten <cstring> nutzt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: