我有一個C++ dll,我從C#代碼調用。 該DLL需要在幾個參數,並返回一個int ..從C#調用C++ dll時內存泄漏
C++代碼。
extern "C" __declspec(dllexport) int DoSomething(char* input1, char* buffer)
{
gss_buffer_desc token;
std::string encodedTokenStr = base64_encode((unsigned char *)token.value, token.length).c_str();
std::copy(encodedTokenStr.begin(), encodedTokenStr.end(), buffer);
return value;
}
C#
public sealed class MyClass
{
public int DoSomething(string input1, out StringBuilder buffer)
{
buffer = new StringBuilder(10000);
return DoSomething(input1, buffer)
}
[DllImport("mycppcode.dll")]
private static extern int DoSomething(string input1, StringBuilder buffer)
}
有時我看到了很多的記憶正在使用該應用程序,我的第一個想法是關於內存泄漏。 垃圾收集器是否負責處理在C++代碼中初始化的所有對象? C++代碼是否爲字符串構建器(「緩衝區」)初始化了一些內存,即使它是在C#中初始化的。我不能在C++中處理這個,因爲我需要從字符串構建器收集數據。
我從來沒有在C++上工作過,但我看到很少在C++ dll中聲明的對象正在被清除。
我可能會以我調用C++代碼的方式做錯事。 這個字符串生成器會導致內存泄漏嗎?
什麼是'encodedTokenStr'? –
它執行一些操作,最終的編碼值被存儲在該字符串中,然後被複制到字符串「buffer」。我補充說,line coz buffer是C#方法中的一個輸出變量。 – Rasm
我的意思是在代碼中定義它,具體來說,我想看看類型,以及之前的內存分配 –