14x14のボードでHexというゲームをプレイするプログラムを作成する必要があります。そこで、ボードを作成し、割り当てて、「-」(空のスペースのパターン)で埋めました。
ボードの座標を印刷しようとすると、常に「-」が表示されるとは限りませんが、ランダムな文字がいくつか表示されます。
また、「board [i] [j] = '-';」の行の後にcreateBoard関数でarray [i] [j]をprintfしようとすると tab [8] [0]を出力した直後に、セグメンテーション違反が発生します。
これを引き起こしているのは何ですか?どうすれば修正できますか?
私のコード:
#include <stdio.h>
#include <stdlib.h>
char **createBoard()
{
/*Allocates a 14x14 matrix and fills it
*with '-' to create the board.*/
int i, j;
char **board;
board = malloc(14);
if (!board) exit(1);
for (i = 0; i < 14; i++){
board[i] = malloc(14);
if (!board[i]) exit (1);
for (j = 0; j < 14; j++)
board[i][j] = '-';
}
return board;
}
int main()
{
int i, j;
char **board = createBoard();
for (i = 0; i < 14; i++)
for (j = 0; j < 14; j++)
printf("tab[%d][%d]: %c\n",i, j, board[i][j]);
return 0;
}
手始めに、動的に多数の1次元配列を割り当てる代わりに、配列を宣言したくない理由は明確ではありません。
コードに関しては、このメモリ割り当て
board = malloc(14);
無効です。あなたは書かなければなりません
board = malloc( 14 * sizeof( char * ));
また、プログラムが終了する前に、割り当てられたすべてのメモリを割り当てとは逆の順序で解放する必要があります。
マジックナンバーの代わりに名前付き定数を使用する方が常に良いことを考慮に入れてください。少なくともあなたはどちらかを書くことができます
#define N 14
メインの前
または
const int N = 14.
N
マジックナンバー14を使用しているすべての場所で変数を使用します。
ちなみに、C標準関数によると、パラメータのないmainは次のように宣言されます。
int main( void )
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加