0

ボードゲームのグリッドを作成しようとしています。ボードの最大サイズはわかっていますが、ユーザーがコマンドラインに入力した内容に基づいて小さくすることもできます。次のプログラムを作成しました。コンパイルは成功しますが、寸法をコマンド ラインに書き込むと、「セグメンテーション違反 (コア ダンプ)」と表示されます。誰が私が間違ったことを教えてもらえますか?

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

#define BOARD_WIDTH 80
#define BOARD_HEIGHT 52

int i;
int j;
int width;
int height;
int generations;
int grid[BOARD_WIDTH][BOARD_HEIGHT];

int main(int argc, char *argv[])
 {

if (argc < 2)
{
 printf("Not enough arguments entered\n");
 exit(1);
 }
else
{
 width = atoi(argv[2]);
 height = atoi(argv[3]);
 generations = atoi(argv[4]);
 }
for(i=0;i<width;i++)
for(j=0;j<height;j++)

printf("%2d", grid[i][j]);
}
4

4 に答える 4

1

多くのこと

変数を宣言するときに固定の BOARD_WIDTH と BOARD_HEIGHT を設定したため、コマンド ラインでそれよりも高い値を渡すと、機能しません。

しかし、主に何を印刷しようとしていますか? 特定のものに初期化gridしていないため、ランダムなメモリを出力しています。

最初に、'new' を使用してグリッドを初期化する必要があります。これについては、こちらを参照してください。 可変サイズの次元を持つ 2D 配列を作成します。

次に、これらの変数を実際に何かに初期化する必要があります。その後、それらを印刷できます。

あなたがプログラムに渡したものを私たちに見せてくれると、あなたを助けやすくなります. しかし、上記の理由はすべて始まりです。

また、3 を使用しているため、3 つの引数をプログラムに渡さないとクラッシュします。

argv[2] から argv[4] を使用していますが、argv[1] から argv[3] を使用する必要があります。したがって、現在の状態では、4 つの引数を渡さないとクラッシュします。

于 2013-05-14T14:44:12.913 に答える
0

あなたが提示しているコードは単なるスニペットであると仮定します。もしそうなら、私の疑いは、あなたの主な問題は、あなたの引数の間違ったインデックスに対処していることです. 最初の引数はインデックス 1 にあります (ファイル名はゼロです)。argc は、ファイル名を含む引数の総数です。

使用しているすべての引数がコード スニペットに示されていると仮定すると、幅、高さ、および世代がそれぞれインデックス 1、2、および 3 にある合計 4 つのインデックスが必要です。

于 2013-05-14T15:51:05.357 に答える
0

使用する前に、argv[2]、argv[3]、argv[4] に何かがあることを確認してください。おそらく読むべきです if(argc < 5) { exit(1); }

于 2013-05-14T14:44:31.820 に答える
0

問題に対して2つのアプローチがあります.1つ目は、最大サイズの配列を作成し、アクティブな要素のみを使用できます.2つ目は、ゲームが開始するたびに配列を作成できます. 2 番目のオプションでは、ゲーム サイズの入力情報を提供する必要があります。ゲームが開始されるたびに作成したい場合は、文字列値を整数に変更した後に作成するだけです:

a = atoi(argv[2])
b = atoi(argv[3])
i = int[a][b]
于 2013-05-14T14:46:26.457 に答える