2013-03-28 52 views
0

我正在爲C++/CLI函數創建.NET包裝類。該函數在內部使用了一個整數(int*),但我想在.NET端公開一個乾淨的List<int>^。我正在使用以下代碼將C#List轉換爲C++非託管列表int。將列表轉換爲C++/CLI的非託管陣列

除了我沒有使用Marshal::FreeHGlobal釋放分配的內存這個事實,這個函數有什麼問題嗎?例如,我應該爲數組長度字節分配((count * 4) + 4)嗎?

static int* ListToArray(List<int>^ list){ 

    // new array 
    int count = list->Count; 
    int* arr = (int*)(Marshal::AllocHGlobal(count * 4).ToPointer()); 

    // convert list to array 
    for(int a = 0; a < count; a++){ 
     arr[a] = list[a]; 
    } 
    return arr; 
} 

回答

2

您的代碼是正確的。您分配正確的內存量。而不是4我會使用sizeof int,這更具表現力。

我不知道你爲什麼使用AllocHGlobal。我認爲new在C++代碼中更合適。我也想知道爲什麼你使用原始指針。在C++代碼中,std::vector<int>會更有意義嗎?