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;
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
ことりと さんにチップを送りました
チップをありがとうございます。
メッセージは管理画面から確認できます。
酒とアクアリウムが最近の楽しみ。
このクリエイターの人気記事
最新記事
TOPVIEWの人気記事
おすすめの記事
この記事にコメントをしてみませんか?