問題:在C++中,我習慣用memset函數對數組進行初始化,如:
int sz = 100; int *a = (int*)malloc(sizeof(int) * sz); memset(a,0,sizeof(a));
在PHP呼叫這段C++程式碼時(使用url呼叫PHP函數),發現memset函數並沒有起作用,數組a的記憶體沒有被賦值,導致後續程式出現很多錯誤,排查發現了這個問題
原因:根本原因是PHP呼叫C++時,sizeof(a)沒有回傳a指向了連續記憶體空間的大小,而只回傳了指標本身的大小,所以memset沒有起到應有的作用。
解決:在memeset的第三個參數中,使用sizeof(int) * sz 來代替sizeof(a),將數組的實際大小作為參數傳入,這樣memset函數才能起作用
PHP在調用C++時,C++中涉及指標的許多函式庫函數會出現問題,有時必須自己寫,原因可能是PHP呼叫擴充時的記憶體管理機制問題。
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了PHP呼叫C++擴充時memset/sizeof函數無效的問題,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。