首頁  >  文章  >  後端開發  >  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));

上面的程式碼動態開闢了一個int數組a,大小為sz,並把開闢的這段記憶體賦值為ASCII碼0

在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教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn