2016-05-18 6 views
0

Ich habe ein zweidimensionales Array wie folgt:Wie Überlauf in zweidimensionalen Array von C zu erkennen?

[1][0][3] 
[0][2][0] 
[1][0][0] 

ich sollte jede Position zu analysieren, wenn um sie dort eine ‚0‘ ist, und diese Position bekommen. Danach muss ich diese Position mit einer anderen Nummer vervollständigen. Das Problem ist, wie erkennt man, ob die Position, die ich analysiere, nicht existiert, das heißt, ob sie überlastet ist? Ich weiß, dass C keine Grenzen hat, aber es muss einen Weg geben, diese Position zu überprüfen.

+1

Sie wissen, dass die Array-Größe, '3x3' so überprüfen, ob Sie Indizes sind immer in einem Rechtsbereich ... – StoryTeller

+0

Verwendung verschachtelten Schleifen aber begrenzen Sie die Randbedingungen entsprechend. Beginnen Sie bei Index 1 und stoppen Sie bei Zeile - 2 oder Höhe - 2. Bei der 3X3 in Ihrem Beispiel wird nur die [2] im Dead Center zur Überprüfung verwendet. – nicomp

+0

In dem Bereich, in dem das Array deklariert ist, können Sie mit 'sizeof()' die Größe des Arrays ermitteln. Übergeben Sie das Array jedoch an eine Funktion, wird nur ein Zeiger übergeben. Sie müssen auch die Größeninformation übergeben, es gibt keine Möglichkeit für die Funktion, es selbst zu bekommen. – Barmar

Antwort

0

Sie müssen GNU Scientific Library verwenden oder 2dimm-Array mit Get/Set-Funktionen implementieren. Etwas wie folgt aus:

#include <stdio.h> 
    #include <assert.h> 
    #include<stdlib.h> 

    struct Arr { 
     double* arr; 
     int max_x; 
     int max_y; 
    } typedef Arr; 

    Arr* Arr_new(int x, int y){ 
     Arr* result = (Arr*)malloc(sizeof(Arr)); 
     if (result){ 
      result->arr = (double*)malloc(x*y*sizeof(double)); 
      result->max_x = x; 
      result->max_y = y; 
     } 
     return result; 
    } 

    void Arr_free(Arr* arr){ 
     free(arr->arr); 
     free(arr); 
    } 

    // Arr_set(arr, 0, 0, 3.14) is correct. 
    void Arr_set(Arr* arr, int i, int j, double val){ 
     //replace your code if needed: 
     assert(arr->max_x > i); 
     assert(arr->max_y > j); 
     arr->arr[i + j*arr->max_x] = val; 
    } 

    // Arr_get(arr, 0, 0) is correct. 
    double Arr_get(Arr* arr, int i, int j){ 
     //replace your code if needed: 
     assert(arr->max_x > i); 
     assert(arr->max_y > j); 
     return arr->arr[ i + j*arr->max_x]; 
    } 


    int main(void) 
    { 
     Arr* a = Arr_new(3,3); 
     Arr_set(a, 2, 2, 1.234) ; 
     double val = Arr_get(a,2,2); 
     printf("val = %f\n",val); 

     Arr_free(a); 
     return 0; 
    } 
Verwandte Themen