У меня есть C# программа, вызывающая внешнюю функцию. C Функция имеет следующий вид:
char *confd_ns2prefix(u_int32_t ns)
{
struct schema *schema = find_schema(ns);
if (schema != NULL)
return (char *)schema->prefix;
return NULL;
}
Я объявил функцию следующим образом:
[DllImport("libconfd.so", SetLastError = true)]
public static extern string confd_ns2prefix(UInt32 ns);
При двойном вызове функции, например:
Console.WriteLine(libconfd.confd_ns2prefix((uint)1826703833));
Console.WriteLine(libconfd.confd_ns2prefix((uint)1826703833));
Во второй раз я получу ошибку двойного освобождения:
ncm
do tnet (39827,0x11dd24dc0) mallo c: двойное освобождение от объекта 0x7f8182037b20
do tnet (39827,0x11dd24dc0) mallo c: *** установить точку останова в malloc_error_break для отладки
Похоже, маршаллер пытается освободить объект дважды, но я понятия не имею, почему ... На самом деле, оно даже не должно освобождать его.
Есть идеи?