Взаимодействие C# с C и распределение памятиC#

Место общения программистов C#
Ответить
Anonymous
 Взаимодействие C# с C и распределение памяти

Сообщение Anonymous »

В C у меня есть следующие функции

Код: Выделить всё

uint8_t* allocateMem() {
return malloc(4096);
}

void freeMem(uint8_t* ptr) {
free(ptr);
}

и в коде C#

Код: Выделить всё

[DllImport(memDllPath, CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr allocateMem();
[DllImport(memDllPath, CallingConvention = CallingConvention.Cdecl)]
static extern void freeMem(IntPtr ptr);

и я использую его, как показано ниже

Код: Выделить всё

var mem = allocateMem();
var bytes = new byte[4096];
Marshal.Copy(mem, bytes, 0, 4096);
freeMem(mem); // is this ok?

Мой вопрос: когда я снова вызову freeMem с IntPtr, будет ли освобождена память (4096 байт), которая была выделена в C?
Освобождена ли на это есть гарантия? Есть ли вероятность утечки памяти при использовании этого шаблона?
Пытаемся вызвать функции C из C#. Я хочу убедиться, что шаблон, который я использовал в коде, верен.

Подробнее здесь: https://stackoverflow.com/questions/792 ... allocation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»