所以我有这个小代码:
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);
}
}
的输出不再相同了!
我的问题当然是为什么?
答案 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