Wie klar ist der Inhalt des Speichers in C?
Ich bin die Definition einer char-Zeiger in dieser Art und Weise.
char *s=(char *)malloc(10);
Nachdem ich fülle in alle möglichen Werte, die passen hier möchte ich klar was ich schrieb zu s und ohne Verwendung von malloc wieder schreiben wollen in s? Wie kann ich dies tun?
Brauche ich den Inhalt aktualisieren, aber wenn in der letzten iteration nicht alle Werte aktualisiert werden, dann werde ich die Verarbeitung über alte Werte, die ich nicht wollen, zu tun.
- Bitte erklären, was du meinst mit "klar".
- warum die Mühe mit der Reinigung des Wert-wenn Sie möchten, aktualisieren Sie den Inhalt des
s
überhaupt? sizeof(2*5)
sieht komisch aus... Versuche auchsizeof(2/0)
- geben Sie einen block von unendlicher Größe.
- Ein Traum wird wahr!!! Du Verdienst einen Nobelpreis 😉
- und
sizeof(-1000)
würde Ihnen ein negativ-sortierte array: sehr nützlich, wenn Sie sind, out of memory! memset
?- frei(s) frei der Speicher für Zeiger s.
- nur versuchen, diese...
- ah ja, es ist
sizeof(int)
- Wenn Sie möchten, legen Sie den memory zone auf null, können Sie calloc. Durch die Art und Weise, persönlich, wenn ich run out of memory, ich bevorzuge Chuck Norris. Die RAM-chips bekommen, so verängstigt, dass Sie sich trennen, das gibt mir doppelten Speicher. Gut ist das, was Chuck Norris sagte mir jedenfalls, nachdem ich ihm meine Seele.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorsichtig sein!
malloc(sizeof(2*5))
ist das gleiche wiemalloc(sizeof(int))
und weist nur 4 Byte auf einem 32-bit-system. Wenn Sie möchten, zuweisen von 10 bytes verwendenmalloc(2 * 5)
.Können Sie durch löschen des Arbeitsspeichers durch
malloc()
mitmemset(s, 0, 10)
odermemset(s, 0, sizeof(int))
nur für den Fall-das war wirklich das, was Sie soll.Sehen Mann memset.
Anderen Weg, um den Speicher zu löschen ist mit
calloc
anstelle von malloc. Dieser ordnet den Speicher wie malloc funktioniert, setzt aber den Speicher auf null sowie.Ein paar Beobachtungen:
malloc()
in C.malloc()
argument falsch aussieht; beachten Sie, dasssizeof
ist ein operator, keine Funktion. Es werden anhand der Größe der Typ des Arguments: 2 * 5 hat Typint
werden, sodass der Wert wird wahrscheinlich 4. Beachten Sie, dass dies ist das gleiche für alle integer-Ausdrücke:sizeof 1
ist das gleiche wiesizeof 100000000
.Deine Frage ist sehr unklar, es ist nicht leicht zu verstehen, warum Sie das Gefühl haben, "klare", der string-Bereich. Speicher ist Speicher, wird es halten, was Sie zuletzt schrieb, es gibt keine Notwendigkeit, "clear", die es zwischen schreibt. In der Tat, ein "clear" ist nur ein schreiben von einem bestimmten Wert.
Können Sie den "löschen" - Speicher mit
memset
und Einstellung alle bytes in den Speicher-block zu0
. So zum Beispiel: