У меня есть C++ dll, которую я вызываю из кода C#. dll принимает пара параметров и возвращает int ..Утечка памяти при вызове C++ dll из C#
Код на 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». Я добавил, что строка coz buffer является переменной out в методе C#. – Rasm
Я имел в виду определить его в коде, в частности, я хочу увидеть тип и предыдущие распределения памяти –