質問: C++ では、次のような memset 関数を使用して配列を初期化することに慣れています。
int sz = 100; int *a = (int*)malloc(sizeof(int) * sz); memset(a,0,sizeof(a));
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 チュートリアルに興味のある友人に役立つことを願っています。