Frage: In C++ bin ich es gewohnt, die Memset-Funktion zum Initialisieren des Arrays zu verwenden, wie zum Beispiel:
int sz = 100; int *a = (int*)malloc(sizeof(int) * sz); memset(a,0,sizeof(a));
Wenn PHP diesen C++-Code aufruft (unter Verwendung der URL, um die PHP-Funktion aufzurufen), wird festgestellt, dass die Memset-Funktion nicht funktioniert und der Speicher des Arrays a ist nicht zugewiesen, was zu nachfolgenden Fehlern führt. Es gab viele Fehler im Programm und bei der Fehlerbehebung wurde dieses Problem festgestellt
Ursache: Die Hauptursache ist, dass sizeof(a) beim Aufruf von C++ durch PHP nicht die Größe von zurückgibt Der kontinuierliche Speicherplatz, auf den a zeigt, gibt jedoch nur die Größe des Zeigers selbst zurück. Daher spielt Memset nicht die ihm zustehende Rolle.
Lösung: Verwenden Sie im dritten Parameter von Memeset sizeof(int) * sz anstelle von Sizeof(a) und übergeben Sie die tatsächliche Größe des Arrays als Parameter, damit die Memset-Funktion funktionieren kann
Wenn PHP C++-Erweiterungen aufruft, treten bei vielen Bibliotheksfunktionen mit Zeigern in C++ Probleme auf, und manchmal müssen Sie sie selbst schreiben. Der Grund dafür kann ein Problem mit dem Speicherverwaltungsmechanismus sein, wenn PHP Erweiterungen aufruft.
Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.
Das Obige führt das Problem der ungültigen Memset/Sizeof-Funktion ein, wenn PHP die C-Erweiterung aufruft, einschließlich des relevanten Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.