1

我在函数中分配 cli::array 时遇到问题。

我有这种对象:

array<double>^ tmsr2;

现在我想在函数中分配它:

void allocate(array<double>^ tmsr2)
{
    tmsr2=gcnew array<double>(100);
}

现在,函数中的 tmsr2 得到了很好的分配,但是在返回 main() 时我丢失了指针问题对我来说很清楚,就像我想分配简单的数组 "double *a"; 我需要将指针传递给函数所以“&a”,然后一切正常。我只是不知道托管数组的语法。非常感谢帮助。

彼得

4

2 回答 2

2

您可以将数组作为参考传递:

void allocate(array<double>^ &tmsr2)
{
    tmsr2=gcnew array<double>(100);
}
于 2012-10-04T10:17:07.707 回答
2

由于array<double>是托管类型,因此您可以在此处使用托管跟踪引用,而不是普通引用。

void allocate(array<double>^% tmsr2)
{
    tmsr2 = gcnew array<double>(100);
}

这是我的测试应用程序:

public ref class AsAClassField
{
public:
    array<double>^ b;

    AsAClassField()
    {
        allocate(b);
        Debug::WriteLine("b = " + (b != nullptr ? "array" : "null"));
    }
};

int main(array<System::String ^> ^args)
{
    array<double>^ a = nullptr;
    allocate(a);
    Debug::WriteLine("a = " + (a != nullptr ? "array" : "null"));
    AsAClassField^ foo = gcnew AsAClassField();

    return 0;
}

输出:

a = 数组
b = 数组

当然,您可以随时切换 allocate 函数以返回新分配的数组,而不是将其作为参考。那将更多地采用托管风格。

于 2012-10-04T18:17:23.893 回答