ホームページ  >  記事  >  バックエンド開発  >  PHPがC++拡張機能を呼び出す際にmemset/sizeof関数が無効になる問題

PHPがC++拡張機能を呼び出す際にmemset/sizeof関数が無効になる問題

WBOY
WBOYオリジナル
2016-08-08 09:21:012221ブラウズ

質問: C++ では、次のような memset 関数を使用して配列を初期化することに慣れています。

int sz = 100;
int *a = (int*)malloc(sizeof(int) * sz);
memset(a,0,sizeof(a));

上記のコードは、サイズ sz の int 配列 a を動的に開き、開いたメモリを ASCII コード 0 に割り当てます。

PHP がこの C++ コードを呼び出したとき (url を使用して PHP 関数を呼び出した)、memset 関数が機能しないことが判明し、その結果、後続のプログラムで多くのエラーが発生しました。この問題

理由: 根本的な理由は、PHP が C++ を呼び出すとき、sizeof(a) は a が指す連続メモリ空間のサイズを返さず、ポインター自体のサイズのみを返すため、memset が再生されないことです。その当然の役割。

解決策: memeset の 3 番目のパラメーターで、sizeof(a) の代わりに sizeof(int) * sz を使用し、配列の実際のサイズをパラメーターとして渡して、memset 関数が機能できるようにします

PHP が呼び出していますC++ 拡張機能 C++ のポインターを含む多くのライブラリ関数で問題が発生する場合があり、その理由は、PHP が拡張機能を呼び出すときのメモリ管理メカニズムの問題である可能性があります。

著作権声明: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

上記では、PHP が C++ 拡張機能を呼び出すときの無効な memset/sizeof 関数の問題を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。