Das Problem, dass die Funktion memset/sizeof ungültig ist, wenn PHP die C-Erweiterung aufruft

WBOY
Freigeben: 2016-08-08 09:21:01
Original
2257 Leute haben es durchsucht

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));
Nach dem Login kopieren

Der obige Code öffnet dynamisch ein int-Array a mit einer Größe von sz, und setzt Dem zugewiesenen Speicher wird der ASCII-Code 0 zugewiesen

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.

Verwandte Etiketten:
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