c#中的锯齿状数组固定

时间:2014-01-06 09:41:27

标签: c# pointers unsafe jagged-arrays

我有点问题。我试图固定一个锯齿状的阵列(由于我处理的数据的庞大规模,我正在使用它):

    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();
    }

我需要在我的代码的多个部分中使用这些双**,并且不希望每次我需要使用它们时都明确地将它们固定。在我看来,因为我可以通过通常的固定语句修复它们,我应该能够为它们分配一个固定句柄。

有没有办法实际固定双* []?

1 个答案:

答案 0 :(得分:0)

显然没有办法做到这一点。因此,我决定使用固定语句而不是分配固定句柄。