复制数组使用原始数组修改函数的行为

时间:2014-04-02 17:33:40

标签: c++ c arrays

编辑:我已编辑了我的代码,以添加&#;;" C"'部分(不确定是否有所作为)

所以我有这个小代码:

extern "C"{
   void foo(int* nR,int* mR,float* x,float* out){       //&& 
       const int n=*nR,m=*mR;
       other_foo(n,m,x,out);
   }
}

工作正常。但现在我想在传递之前复制n-array float的{​​{1}} 函数x(因为other_foo将改变other_foo,我想保留一个 拷贝)。

如果我愿意的话,一切正常:

x

但如果我愿意的话:

extern "C"{
   void foo(int* nR,int* mR,float* x,float* out){       //&& 
       const int n=*nR,m=*mR;
       float y[n];
       for(int i=0;i<n;i++) y[i]=x[i];
       other_foo(n,m,x,out);
   }
}

所有地狱都失败了:extern "C"{ void foo(int* nR,int* mR,float* x,float* out){ //&& const int n=*nR,m=*mR; float y[n]; std::copy(x,x+n,y); other_foo(n,m,x,out); } } 的输出不再相同了!

我的问题当然是为什么?

1 个答案:

答案 0 :(得分:1)

这两个代码片段相对于复制结果没有区别。

void foo(int* nR,int* mR,float* x,float* out){      //&& 
    const int n=*nR,m=*mR;
    float y[n];
    for(int i=0;i<n;i++)    y[i]=x[i];
    other_foo(n,m,x,out);
}


void foo(int* nR,int* mR,float* x,float* out){      //&& 
    const int n=*nR,m=*mR;
    float y[n];
    std::copy(x,x+n,y);
    other_foo(n,m,x,out);
}

从x到y复制n个元素。

但是,此代码不符合C ++。数组的大小应该是编译时已知的常量表达式。因此,动态分配数组更为正确。

例如

void foo(int* nR,int* mR,float* x,float* out){      //&& 
    int n = *nR, m = *mR;
    float *y = new float[n];
    std::copy( x, x+n, y );
    other_foo( n, m, x, out );
    // other code  maybe including delete [] y
}

我认为问题不在于此功能。似乎问题在于调用函数other_foo