buffer
ist nur ein Zeiger ohne Größeninformation. Allerdings wird die malloc () - Routine die Größe der Zuweisung halten, die Sie gemacht haben, wenn Sie sie freigeben (), wird der richtige Speicherplatz frei. Wenn Sie also nicht in der malloc () -Funktionalität tauchen möchten, empfehle ich Ihnen, die Größe der Zuweisung selbst zu speichern. (Für eine mögliche Implementierung, siehe das Beispiel in der anderen API-Antwort).
Sie können einen solchen Test nicht machen. Es liegt in Ihrer eigenen Verantwortung, sich daran zu erinnern, wie viel Speicher Sie zugewiesen haben. Wenn der Puffer Ihnen von jemand anderem gegeben wird, fordern Sie, dass sie auch die Größeninformation weitergeben, und machen Sie es in ihrer Verantwortung, den richtigen Wert zu übergeben oder das Programm zum Erliegen zu bringen.
Da buffer
ein Zeiger (kein Array) ist, gibt der Operator sizeof
die Größe eines Zeigers und nicht die Größe des Puffers zurück, auf den er zeigt. Es gibt keine Standardmethode, um diese Größe zu bestimmen, also müssen Sie die Buchhaltung selbst durchführen (z. B. daran erinnern, wie viel Sie zugewiesen haben.)
Übrigens, es ist das gleiche für
%Vor%Interessanterweise
%Vor%ist 14. Können Sie raten warum?
Benutze die API und nicht malloc / free und du kannst nichts falsch machen.
sizeof wird verwendet, um die Größe für tatsächliche Objekte, nicht Zeiger für Objekte im Speicher zu berechnen. Es gibt die Größe von Strukturen oder Primitiven zurück. Ich meine, es wird funktionieren, aber Sie erhalten die Größe des Zeigers, nicht die Struktur, auf die er zeigt. Um die Länge eines Arrays zu erhalten, benutze:
strlen (Puffer)
Tags und Links c buffer-overflow malloc buffer