我编写了以下代码从指针返回多维数组,这个函数的function.Input参数是一维数组,输出是指针那点多维数组。
double **function( array< double>^ data,int width,int height ) {
int i;
double **R = new double *[height];
for (i=0;i<=height;i++)
R[i]=new double [width];
// ....
return R;
}
int main( void ) {
int M=2, N=10, i,j;
// define multimensional array 2x10
array< array< double >^ >^ input = gcnew array< array< double >^ >(M);
for (j=0; j<input->Length; j++) {
input[j]=gcnew array<double>(N);}
double **result1 = new double *[N];
for(i=0; i<=N; i++)
result1[i]=new double [M];
double **result2 = new double *[N];
for(i=0; i<=N; i++)
result2[i]=new double [M];
//............
// send first row array of multidimensional array to function
result1=function(input[0],M,N);
// send second row array of multidimensional array to function
result2=function(input[1],M,N);
for (i=0;i<=N;i++)
delete R[k];
delete R;}*/
return 0;
}我在Visual 2008中成功地构建了这个程序。当我调试这段代码时,程序计算了result1 pinter变量,但是在计算函数中的result2时:
R=new double *[height];
for (i=0; i<=height; i++)
R[i]=new double [width];提供了以下错误:
'System.Runtime.InteropServices.SEHException‘类型的未处理异常发生在stdeneme.exe中
附加信息:外部组件引发异常。
不幸的是我不知道该怎么做。
发布于 2009-05-28 14:21:13
一看,我就看到一个错误
for (i=0;i<=height;i++)
{
R[i]=new double [width];
}您已经分配了Rheight,但是循环是height+1的
你应该写循环
for (i=0; i<height; i++)我看到的另一件事是,当你想破坏你的矩阵时,你会写
delete R[k];但它应该是
delete [] R[k];发布于 2009-05-28 14:16:23
<=是你的问题。有效的数组索引从0到N-1。分配给result1[N]是一种访问冲突--这是它抱怨的例外。
https://stackoverflow.com/questions/921005
复制相似问题