2013-08-09 3 views
-1

Скажем, у меня есть этот код:Является ли маршал.AllocHGlobal() результатом детерминированным?

IntPtr native_color = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gdk.RGBA))); 

ли память native_color все инициализируются нулями? Вы думаете, да, но есть некоторые случаи, когда я обнаружил, что это не так ... Итак, Маршал.AllocHGlobal() не детерминирован?

ответ

1

Из документации Marshal.AllocHGlobal Method (Int32)

Когда AllocHGlobal называет LocalAlloc, она проходит флаг LMEM_FIXED, который вызывает выделенную память будет зафиксирована на месте. Кроме того, выделенная память не заполнена нулем.

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

+2

+1 Вы хотите, чтобы я прочитал документацию? Где вы получаете эти сумасшедшие идеи? –

+1

oops sorry Я смутился, когда я приземлился на этой странице http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.allochglobal.aspx, и я не видел больше объяснений, очевидно, я должен был выбрать правильную перегрузку ... спасибо – knocte