我有点问题。我试图固定一个锯齿状的阵列(由于我处理的数据的庞大规模,我正在使用它):
public void ExampleCode(double[][] variables) {
int nbObservants = variables.Length;
var allHandles = new List<GCHandle>();
double*[] observationsPointersTable = new double*[nbObservants];
double** observationsPointer;
GCHandle handle;
for (int i = 0; i < nbObservants; i++) {
handle = GCHandle.Alloc(variables[i], GCHandleType.Pinned);
allHandles.Add(handle);
observationsPointersTable[i] = (double*) handle.AddrOfPinnedObject(); // no prob here
}
fixed(double** obsPtr = observationsPointersTable) { // works just fine
Console.WriteLine("haha {0}", obsPtr[0][0]);
}
handle = GCHandle.Alloc(observationsPointersTable, GCHandleType.Pinned); // won't work
allHandles.Add(handle);
observationsPointer = (double**) handle.AddrOfPinnedObject();
// ...
foreach (var aHandle in allHandles) {
aHandle.Free();
}
allHandles.Clear();
}
我需要在我的代码的多个部分中使用这些双**,并且不希望每次我需要使用它们时都明确地将它们固定。在我看来,因为我可以通过通常的固定语句修复它们,我应该能够为它们分配一个固定句柄。
有没有办法实际固定双* []?
答案 0 :(得分:0)
显然没有办法做到这一点。因此,我决定使用固定语句而不是分配固定句柄。