Wenn ich einen Kommentar zu einer anderen Antwort von mir here beantworte, fand ich, was ich denke kann ein Loch im C-Standard sein (c1x, ich habe die früheren und nicht überprüft Ja, ich weiß, es ist unglaublich unwahrscheinlich, dass ich alleine unter allen Bewohnern des Planeten einen Fehler im Standard gefunden habe. Informationen folgen:Mögliches Problem mit C Standard malloc'ing Zeichen
- Abschnitt 6.5.3.4 ("Die Größe des Betreibers") Para 2 Staaten
"The sizeof operator yields the size (in bytes) of its operand"
. - Absatz 3 dieses Abschnitts besagt:
"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1"
. - Abschnitt 7.20.3.3 beschreibt
void *malloc(size_t sz)
aber alles, was es sagt, ist"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"
. Es wird überhaupt nicht erwähnt, welche Einheiten für das Argument verwendet werden. - Anhang E beginnt die 8 ist die Minimum Wert für
CHAR_BIT
so Zeichen können mehr als ein Byte lang sein.
Meine Frage ist einfach:
In einer Umgebung, in ein char 16 Bit breit ist, wird malloc(10 * sizeof(char))
10 Zeichen zuweisen (20 Byte) oder 10 Bytes? Punkt 1 scheint auf erstere hinzuweisen, Punkt 2 zeigt letzteres an.
Wer mit mehr C-Standard-fu als ich habe eine Antwort dafür?
Eigentlich glaube ich, dass Sie es dort haben können. basierend auf Ihrer Antwort fand ich 3.6 (in "Begriffe, Definitionen und Symbole") mit der Angabe "byte - adressierbare Datenspeichereinheit, die groß genug ist, um jedes Element des grundlegenden Zeichensatzes der Ausführungsumgebung aufzunehmen ..." ANMERKUNG 2 - Ein Byte besteht aus einer zusammenhängenden Folge von Bits, deren Anzahl implementierungsdefiniert ist ". – paxdiablo
Verdammt, denke an den Ruhm und die Auszeichnungen, die ich bekommen hätte, um ein Problem im Standard zu finden. Na ja, zurück zum Tagesjob :-) – paxdiablo
Wieder einmal wiederhole ich das Mantra "Ich brauche eine Kopie des Standards". Ich füge Ihr Standardangebot zu meiner Antwort für die Vollständigkeit hinzu. –