Heim > Backend-Entwicklung > C++ > Ist das Löschen eines „void*'-Zeigers mit „delete[]' in C sicher?

Ist das Löschen eines „void*'-Zeigers mit „delete[]' in C sicher?

DDD
Freigeben: 2024-12-05 15:00:18
Original
933 Leute haben es durchsucht

Is Deleting a `void*` Pointer with `delete[]` Safe in C  ?

Löschen leerer Zeiger: Eine Sicherheitsbewertung

Bedenken Sie den folgenden Codeausschnitt:

void* my_alloc(size_t size) {
  return new char[size];
}

void my_free(void* ptr) {
  delete[] ptr;
}
Nach dem Login kopieren

Ist es sicher, einen als zugewiesenen Zeiger zu löschen? void* mit delete[] Operator?

Antwort:

Das Löschen eines Zeigers über ein void* ist im C-Standard ausdrücklich nicht definiert. In Abschnitt 5.3.5/3 heißt es:

Wenn sich in der ersten Alternative (Objekt löschen) der statische Typ des Operanden von seinem dynamischen Typ unterscheidet, muss der statische Typ eine Basisklasse des dynamischen Typs des Operanden sein und der statische Typ muss einen virtuellen Destruktor haben, sonst ist das Verhalten undefiniert. Bei der zweiten Alternative (Array löschen) ist das Verhalten undefiniert, wenn der dynamische Typ des zu löschenden Objekts von seinem statischen Typ abweicht.

Zusätzlich wird in der Fußnote darauf hingewiesen:

Dies impliziert dass ein Objekt nicht mit einem Zeiger vom Typ void* gelöscht werden kann, da keine Objekte vom Typ vorhanden sind void.

Schlussfolgerung:

Es ist unsicher, einen als void* zugewiesenen Zeiger mit dem Operator delete[] zu löschen. Wandeln Sie den Zeiger vor dem Löschen immer in seinen ursprünglichen Typ um.

Das obige ist der detaillierte Inhalt vonIst das Löschen eines „void*'-Zeigers mit „delete[]' in C sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage