2009-05-28 9 views
0

Ich habe gerade eine Objective-C-Bibliothek in eine C-Bibliothek umgewandelt, in der Hoffnung, es plattformübergreifend zu machen. Allerdings scheint alles in Ordnung zu sein, bis ich dieses Ding zur Verarbeitung abschicke.Malloc'ed Zeichenfolge enthält Müllwerte

Es ist an dem Punkt, ich bekomme einen Fehler.

Im Rückblick ein paar Revisionen, bemerkte ich etwas im Debugger.

Gleich nach einer malloc'd Zeichenfolge wie folgt:

char *theString = malloc(SOME_SIZE * sizeof(char)); 

würde ich sehen, dass theString ist \ x03 und * theString "3 '\ 003'".

Ich nahm zuerst an, dass dies nur seltsame Erinnerung war, da ich keine strcat oder irgendetwas daran habe, aber diese ungeraden Startzeichen tragen, und wieder an jedem anderen Punkt, dass ich einen ähnlichen malloc führe .

In Bezug auf die normale Verarbeitung ist das in Ordnung. Leider verstehe ich nicht, was es ist, sonst würde ich etwas drastisches machen, wie zum Beispiel den ersten Charakter oder etwas abzuschneiden.

Kann mir jemand erklären, was das ist und wie ich damit umgehe, wenn ich es sicher in einen NSString konvertieren möchte?

Antwort

9

Der von malloc zurückgegebene Wert wird nicht garantiert auf einen bestimmten Wert festgelegt. Es ist garantiert nur auf den Speicher zu verweisen, den Sie besitzen, mindestens so lang wie Sie angegeben haben. Wenn Sie möchten, dass der Speicher zu einem gewissen Wert initialisiert wird, müssen Sie dies selbst tun. Oder verwenden Sie alternativ Calloc, der den Speicher auf Null setzt.

+1

Beachten Sie, dass Calloc sollte nicht verwendet werden, wenn es notwendig ist (z. B. für Strukturen oder Arrays). –

+1

Können Sie das näher ausführen? Ich nehme an, dass ein Zeiger auf ein einzelnes Element Calloc nicht verwenden sollte (wie für eingebaute Typen)? – Sam

+0

Die Nullstellung ist möglicherweise teuer. Außerdem habe ich seltsame Dinge bei der Verwendung von calloc() gesehen, die alle durch die Verwendung von malloc() gefolgt von bzero() gelöst wurden. –

Verwandte Themen