2009-05-28 10 views
2

Ich schrieb folgenden Code, um mehrdimensionale Array von Zeigerfunktion zurückzugeben.Input-Parameter dieser Funktion ist eindimensionale Array, Ausgabe ist Zeiger, dass Punkt mehrdimensionalen Array.Rückgabe eines mehrdimensionalen Arrays aus Zeigerfunktion in C++ - CLI

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

Ich baute dieses Programm erfolgreich in Visual Studio 2008.When debuggen ich diesen Code, der Programm berechnet result1 pinter Variable aber result2 in der Funktion hier bei der Berechnung:

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

Visual Studio diesem Fehler geben :

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

Leider weiß ich nicht, was zu tun ist.

Antwort

3

Die <= s sind Ihr Problem. Gültige Array-Indizes gehen von 0 bis N-1. Zuweisen zu result1[N] ist eine Zugriffsverletzung - das ist die Ausnahme, über die es sich beschwert.

9

Auf einen Blick sehe ich einen Fehler

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

Sie haben R zugeordnet [Höhe] aber die Schleifenhöhe + 1

geht sollten Sie die Schleife schreiben

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

Another was ich sehe ist, dass, wenn Sie Ihre Matrix zerstören wollen, schreiben Sie

delete R[k]; 

aber es sollte

delete [] R[k]; 
+0

+1 sein: auf dem löschen Fehler –

+0

Danke für Ihre Hilfe Gut gesichtet. Ich korrigierte ** <= Höhe ** Problem und tat es ** yalcin

Verwandte Themen