質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

3回答

6504閲覧

C++における二次元配列について

Daichi

総合スコア47

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2015/06/06 17:56

配列について質問です。
二次元配列において、以下のプログラムでは100x100の配列で実行すると動きます。
この配列を1000x1000にすると、プログラムが止まってしまいます。
このように配列には、??x??までなどの上限があるのでしょうか?
もしなければ、1000x1000以上の配列を作ろうとすると
エラーになる理由を教えてください。
よろしくお願いします。

lang

1#include <stdio.h> 2#define N 100 3int main() 4{ 5 int a[N][N] = { 0 }; 6 7 for (int i = 0; i < N; i++) 8 { 9 for (int m = 0; m < N; m++) 10 { 11 printf("a[%d][%d]=%d\n", i, m, a[i][m]); 12 } 13 } 14 return 0; 15} 16 17 18 19 20 21 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

スタックオーバーフローとお見受けします。

投稿2015/06/06 18:41

IchigoTaruto

総合スコア159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/06/06 18:45

ありがとうございます!!
guest

0

64 bit OS なら N = 1000 はエラーにならないとおもいます。
MacOSX での実行例です。

$ gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) Target: x86_64-apple-darwin14.3.0 Thread model: posix $ cat 1.c #include <stdio.h> #define N 1000 int main() { int a[N][N] = { 0 }; for (int i = 0; i < N; i++) { for (int m = 0; m < N; m++) { printf("a[%d][%d]=%d\n", i, m, a[i][m]); } } return 0; } $ gcc 1.c $ ./a.out > /tmp/1.txt $ ls -al /tmp/1.txt -rw-r--r-- 1 katoy wheel 13780000 6 7 07:30 /tmp/1.txt

N=10000 に書き換えて実行すると、さすがにエラーになります。

$ gcc 1.c $ ./a.out Segmentation fault: 11

参考情報:

...
VC++では268435456バイトを超えるデータ領域を持つプログラムは作成できません。
a[10000][10000]だと、配列要素数は100000000個なので、int型だともうオーバーですね。
...

投稿2015/06/06 22:36

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/06/08 06:06

わざわざURLまで貼って頂きありがとうございます! メモリ??が関係していたのですね! 次からはその辺も気を付けながら書いていくようにします!
guest

0

どうしても同様のことがしたければ、std::vector を 2次元で使うのが良いと思います。(こちらにも限界はありますが)

投稿2015/06/08 05:38

takotakot

総合スコア1111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/06/08 05:55

回答ありがとうございます! 普通の配列よりも、vectorを使った配列の方が僕的には使いやすかったです! 参考にさせて頂きます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問