2009-05-28 16 views
2

この関数の多次元配列を返すコードを書いた。この関数の入力パラメータは1次元配列で、出力は多次元配列のポインタである。C++のポインタ関数から多次元配列を返す - CLI

R=new double *[height]; 
for (i=0; i<=height; i++) 
    R[i]=new double [width]; 

Visual Studioは、このエラーを与える:

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; 
} 

は、私はこのコード、プログラムの計算結果1のピンター変数をデバッグするが、ここでは関数の中で結果2を計算する時にVisual Studioの2008.Whenに正常にこのプログラムを構築しました:

An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in stdeneme.exe
Additional information: External component has thrown an exception.

残念ながら私は何をすべきかわかりません。

答えて

3

<=が問題です。有効な配列インデックスは0からN-1になります。 result1[N]にアサインするのはアクセス違反です。それは不平を言う例外です。私はあなたがR [高さ] が割り当てられているが、ループは、高さ+ 1

を行くあなたがループに

for (i=0; i<height; i++) 

別を書くべき1つのエラー

for (i=0;i<=height;i++) 
{ 
R[i]=new double [width]; 
} 

を参照してください一見

9

私が見ることは、あなたがあなたの行列を破壊したいと思うときです。

delete R[k]; 

が、それは

delete [] R[k]; 
+0

+1する必要があります:あなたの助けの削除エラーでよく目撃 –

+0

感謝。私は** <= height **の問題を修正しました** yalcin

関連する問題