Cで動的に割り当てられた2D文字配列を埋める際の奇妙な動作

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]

編集
0

コメントを追加

0

関連記事

分類Dev

cの文字の行列(動的に割り当てられた2D配列)

分類Dev

2D numpy配列をpandas DataFrameに割り当てる際の予期しない動作

分類Dev

構造体内で動的に割り当てられた配列を出力する際の未定義の動作

分類Dev

動的に割り当てられた2D配列を異なる列サイズで保存する

分類Dev

動的に割り当てられた2D配列をCの最初の列で並べ替えます

分類Dev

動的に割り当てられた2D配列の削除

分類Dev

C ++の2D配列の動的メモリ割り当てで奇妙なコードに遭遇しましたか?これは何ですか?

分類Dev

C ++で動的に割り当てられた構造の2D配列を作成するにはどうすればよいですか?

分類Dev

C ++:参照によって渡された構造体の動的配列を割り当てて埋める方法は?

分類Dev

動的に割り当てられた別の配列内で動的に割り当てられた配列を解放する

分類Dev

2D動的に割り当てられた配列のforループエラー

分類Dev

Cで動的に割り当てられた文字列配列

分類Dev

2D配列をcに動的に割り当てる

分類Dev

2D動的に割り当てられた配列から列の合計を取得しますか?

分類Dev

C ++で文字列に文字を挿入する際の奇妙な動作

分類Dev

char配列を単一のcharに割り当てるという奇妙な動作

分類Dev

動的に割り当てられた2D配列ポインタから行を取得する

分類Dev

これは動的に割り当てられた2D配列の正しい実装ですか?

分類Dev

構造体内の2D配列から動的に割り当てられたメモリを解放します

分類Dev

C ++で連続する2D配列を動的に割り当てる方法は?

分類Dev

動的/静的に割り当てられた2D配列の両方を取ることができるac関数を書く方法は?

分類Dev

Cで動的に割り当てられた配列のサイズ

分類Dev

2D文字配列にメモリを動的に割り当てる

分類Dev

charの2D配列を動的に割り当てるにはどうすればよいですか?

分類Dev

動的に割り当てられた配列C ++を作成する

分類Dev

関数内で動的に割り当てられた構造体を埋める

分類Dev

動的に割り当てられた2D配列の削除中にエラーが発生しましたか?

分類Dev

C ++で動的に割り当てられた配列を拡張する方法は?

分類Dev

なぜ動的に割り当てられたint配列がscanf、c言語で使用されるのですか?

Related 関連記事

  1. 1

    cの文字の行列(動的に割り当てられた2D配列)

  2. 2

    2D numpy配列をpandas DataFrameに割り当てる際の予期しない動作

  3. 3

    構造体内で動的に割り当てられた配列を出力する際の未定義の動作

  4. 4

    動的に割り当てられた2D配列を異なる列サイズで保存する

  5. 5

    動的に割り当てられた2D配列をCの最初の列で並べ替えます

  6. 6

    動的に割り当てられた2D配列の削除

  7. 7

    C ++の2D配列の動的メモリ割り当てで奇妙なコードに遭遇しましたか?これは何ですか?

  8. 8

    C ++で動的に割り当てられた構造の2D配列を作成するにはどうすればよいですか?

  9. 9

    C ++:参照によって渡された構造体の動的配列を割り当てて埋める方法は?

  10. 10

    動的に割り当てられた別の配列内で動的に割り当てられた配列を解放する

  11. 11

    2D動的に割り当てられた配列のforループエラー

  12. 12

    Cで動的に割り当てられた文字列配列

  13. 13

    2D配列をcに動的に割り当てる

  14. 14

    2D動的に割り当てられた配列から列の合計を取得しますか?

  15. 15

    C ++で文字列に文字を挿入する際の奇妙な動作

  16. 16

    char配列を単一のcharに割り当てるという奇妙な動作

  17. 17

    動的に割り当てられた2D配列ポインタから行を取得する

  18. 18

    これは動的に割り当てられた2D配列の正しい実装ですか?

  19. 19

    構造体内の2D配列から動的に割り当てられたメモリを解放します

  20. 20

    C ++で連続する2D配列を動的に割り当てる方法は?

  21. 21

    動的/静的に割り当てられた2D配列の両方を取ることができるac関数を書く方法は?

  22. 22

    Cで動的に割り当てられた配列のサイズ

  23. 23

    2D文字配列にメモリを動的に割り当てる

  24. 24

    charの2D配列を動的に割り当てるにはどうすればよいですか?

  25. 25

    動的に割り当てられた配列C ++を作成する

  26. 26

    関数内で動的に割り当てられた構造体を埋める

  27. 27

    動的に割り当てられた2D配列の削除中にエラーが発生しましたか?

  28. 28

    C ++で動的に割り当てられた配列を拡張する方法は?

  29. 29

    なぜ動的に割り当てられたint配列がscanf、c言語で使用されるのですか?

ホットタグ

アーカイブ