Heim >Backend-Entwicklung >C++ >Was passiert, wenn Sie in C ein Array der Größe Null mit „new int[0]' zuweisen?
C-Speicherzuweisung mit new int[0]
Bei der Speicherzuweisung mit dem neuen Operator stellt sich häufig die Frage: Was passiert, wenn der Die angeforderte Array-Größe ist Null?
Überraschenderweise ist der Code Snippet:
cout << new int[0] << endl;
gibt eine Adresse aus, die angibt, dass Speicher zugewiesen wurde. Der C-Standard behebt dieses Verhalten:
Zuweisung und Verwendung leerer Arrays
Wie in 5.3.4/7 des C-Standards angegeben, können Arrays der Größe Null zugewiesen werden Ihre Verwendung ist jedoch gemäß 3.7.3.1/2 nicht definiert.
Umgang mit Nullgröße Arrays
Selbst wenn der Speicher erfolgreich zugewiesen wurde, kann nicht garantiert werden, dass die Dereferenzierung sicher ist. Es gibt keine Garantie dafür, dass auf gültigen Speicher verwiesen wird.
Fazit
Es ist zwar zulässig, leere Arrays mit neuem int[0] zuzuweisen, auf diese zuzugreifen oder sie zu ändern Der zugewiesene Speicher weist ein undefiniertes Verhalten auf und sollte vermieden werden. Jeder dieser zugewiesenen Speicher muss mit „Delete“ gelöscht werden, um eine ordnungsgemäße Ressourcenfreigabe sicherzustellen.
Es ist wichtig, die Standardanforderung für den Operator new() zu beachten, einen Zeiger ungleich Null zurückzugeben, selbst für Anfragen der Größe Null, die sich von der unterscheiden Verhalten von malloc(). Die tatsächliche Zuordnung kann jedoch trotzdem fehlschlagen.
Das obige ist der detaillierte Inhalt vonWas passiert, wenn Sie in C ein Array der Größe Null mit „new int[0]' zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!