2013-09-24 155 views
0

我在我的Visual Studio 10得到這個代碼(簡化的例子):返回值++/CLI始終爲1

int myfunc(void) 
{ 
    array <int^>^ temparr=gcnew array<int^>(11); 

    for (int i=0; i<11; i++) 
    { 
     temparr[i]=0; 
    } 

    temparr[2]=1; //one of the elements is 1 


    for (int i=0; i<11; i++) 
    { 
     if (!temparr[i]) return 0; 
    } 

    return 1; 
} 

但是,當我使用此功能輸出爲1,而不是0.什麼是問題以及如何糾正這些代碼?

+0

僅供參考,「^」(帽)表示託管句柄(即,垃圾收集對象)。 –

回答

2

您的代碼中存在未定義的行爲,您將整數值分配給垃圾回收指針。你爲什麼要這麼做?取而代之的是將temparr設爲

array <int> temparr(11); 

即,一個正常整數值的數組。

2

你的代碼不會做你認爲它的作用。

而不是整數數組分配值的,你是它們分配給的pointers數組...

整數的簡單數組將解決你的問題:

array <int> temparr(11); 
// ^^^^^  ^^^^   
+0

感謝您的回答!但聲明這樣的數組後發生錯誤:錯誤C3149:(type):不能在沒有頂級(char)的情況下使用此類型。 而且畢竟我有一個託管代碼託管數組。它需要比較兩個數組 - 託管和非託管。可能嗎? – user2809652