メイン画像

C言語 - 巨大な文字型配列を宣言したら実行時エラーが起きた

C言語 - 巨大な文字型配列を宣言したら実行時エラーが起きた


C言語で巨大な文字型配列を宣言したら実行時エラーが起きた。

コンパイラは Visual C++ (Visual Studio 2017)。

1MB(10の6乗 = 1000000バイト)はエラーなく割り当てられた。

char buf_1mb[1000000];
memset(buf_1mb, '\0', sizeof(buf_1mb) / sizeof(char));

1MiB(2の20乗 = 1048576バイト)はダメだった。

Visual Studio で実行した場合、「ハンドルされない例外が発生しました: 0xC00000FD: Stack overflow」のようなエラーが起きる。

char buf_1mib[1048576];
memset(buf_1mib, '\0', sizeof(buf_1mib) / sizeof(char));

静的確保はダメだったが、動的なメモリー確保であれば 1MiB でもエラーにならない。

以下は malloc() でメモリーを確保するようにしたコード。
確保したメモリーを free() で解放するのを忘れないように。

char *buf_1mib = (char *)malloc(1048576);
if (buf_1mib == NULL) {
    // TODO: メモリーの確保失敗。適切なエラー処理をする
    return 1;
}

memset(buf_1mib, '\0', 1048576);

free(buf_1mib);
buf_1mib = NULL;

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事