Wie kann ein Doppel-pointer verwendet werden, für die eine zwei-dimensionale matrix?

Ich versuche, meine hand auf C durch die Implementierung von Conway ' s game of Life.

Ich versuche, dynamisch zu erstellen zwei Netze (int Matrizen), eine für die aktuelle und für die nächste generation, also nachdem ich bestimmen, was in der nächsten generation aussieht, habe ich nur die swap-Zeiger.

Zuerst habe ich versucht hoffnungslos definieren Sie den Zeiger, um das raster wie int * grid, die Sie nicht Tiefgestellt mit einem zweiten Satz von Klammern wie [][] weil - offensichtlich - der erste Satz von Klammern gibt ein int.

Ich habe auch versucht, so etwas wie int * grid[HEIGHT][WIDTH], aber das gibt Probleme mit der Zuordnung ein Zeiger, wie dieser zu einem anderen. (Und in der Tat, ich habe keine Ahnung, was diese wirklich im Gedächtnis!)

In meiner naiven Hoffnung, dachte ich, könnte das folgende funktionieren nach stolpern über Doppel-Zeiger. Das Programm kompiliert, aber nicht beim laufen auf der Linie angegeben. (In Windows bekomme ich keine mehr detail anderes, als dass das Problem Event Name APPCRASH).

HAFTUNGSAUSSCHLUSS: Dies ist nicht das eigentliche Programm, nur ein proof-of-concept für das problem.

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

int HEIGHT = 20;
int WIDTH = 20;

int ** curr_gen; //Current generation
int ** next_gen; //Next generation

/* Entry Point main */
int main(int argc, char** argv) {

    //Allocate memory for the grids
    curr_gen = malloc(sizeof (int) * WIDTH * HEIGHT);
    next_gen = malloc(sizeof (int) * WIDTH * HEIGHT);

    curr_gen[0][0] = 0; //<< PROGRAM FAILS HERE

    //Release heap resources
    free(curr_gen);
    free(next_gen);

    return 0;
}
  • c-faq.com/aryptr/dynmuldimary.html
  • Sie können nicht einen link Antworten. Um Ihren Fall, die Sie benötigen, um zu verstehen, was Los ist in Speicher
  • Der Begriff "doppelte pointer" ist mehrdeutig. Es kann bedeuten, entweder ein Zeiger auf Zeiger (Typ some_type**) oder ein Zeiger auf Typ double (double*).
Schreibe einen Kommentar