2013-09-24 52 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