2015-07-06 42 views
2

我試圖建立一個DLL,它可以返回在Windows中的Visual Studio中的int和char *,但它發生內存泄漏,我建立這個DLL爲其他語言,當然,在今天的個人電腦,內存是非常大的我可以忽略這個錯誤,但我認爲我會盡我所能,我已經搜索了谷歌,但我仍然沒有找到答案,但我希望有人能告訴我如何解決這個問題,謝謝! farmilar與C++,我看過很多網頁來檢查如何建立一個dll.i希望我可以返回多個字符*在未來,當這個問題已經解決,任何建議?如何在同一時間在C++本機dll中返回整數和char *變量?

int __stdcall postsbinv(char ** retstring) 
{ 
std::wstring wstrinvnum = L"1215265152"; 
size_t outputSize = wstrinvnum.length() + 1; // +1 for null terminator 
char * retinvnumtemp = new char[outputSize];//memory leaks 
size_t charsConverted = 0; 
const wchar_t * wchar_invnum = wstrinvnum.c_str(); 
wcstombs_s(&charsConverted, retinvnumtemp, outputSize, wchar_invnum, wstrinvnum.length());//convert the utf-16 to ascii 
*retstring = retinvnumtemp;//point to the char * 
return 0; 
} 

PS:對於其他的語用,我已經使用的char * 感謝 問候 肯

+3

最好的方法是提供一個獨立的函數,您的調用者可以使用它來釋放您返回的數據,這樣分配機制就是抽象的。 –

回答

0

你可以做這樣的事情來提高你的代碼:

char *retinvnumtemp = new char[outputSize]; 

if(retinvnumtemp==NULL) { 
    // enter code here 
} else { 
    // enter code here 
} 

而且還要防止內存泄漏,你應該使用

delete [] retinvnumtemp;

2

如果您正在使用new分配內存,則需要使用delete來釋放內存,如果調用方使用其他語言,則會出現問題。

所以你需要提供第二個函數來釋放內存。

int __stdcall postsbinv(char** retstring) 
{ 
    *retstring = new char[outputSize]; 
} 

void __stdcall free_sbinv(char** retstring) 
{ 
    if (*retstring) 
     delete[] *retstring; 
}