私はコンウェイの人生ゲームを実装することで C を試しています。
現在のグリッドと次世代のグリッドの 2 つのグリッド (マトリックス) を動的に構築しようとしていますint
。そのため、次世代がどのように見えるかを判断した後、ポインターを交換するだけです。
最初はどうしようもなく のようにグリッドへのポインターを定義しようとしましたがint * grid
、これは のように 2 番目の角かっこのセットで下付きにすることはできません[][]
。
のようなものも試しましint * grid[HEIGHT][WIDTH]
たが、このようなポインターを別のポインターに割り当てると問題が発生します。(そして実際、これがメモリ内で実際に何をするのかわかりません!)
私の素朴な希望の中で、ダブルポインターに出くわした後、次のことがうまくいくと思いました。プログラムはコンパイルされますが、示された行で実行すると失敗します。(Windows では、問題イベント名が であること以外に詳細はわかりませんAPPCRASH
)。
免責事項:これは実際のプログラムではなく、問題の概念実証にすぎません。
#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;
}