電子書籍の厳選無料作品が豊富!

VC++を使ってプログラムを書いています。2次元配列で配列を大きくするとエラーが出てしまいます。1次元配列の場合は今のところ特にエラーは出ない感じです。プログラムにもよりますが、小さい配列でa[300][300]くらいでエラーが出てしまいます。だいたい配列をa[10000][10000]くらい取りたいのですが。このエラーを解消する方法はないでしょう?

A 回答 (5件)

#include <stdio.h>


#include <malloc.h>

//1000個のintの配列の型をARRAY1K型と定義
typedef int ARRAY1K[1000];

void main(){

//ARRAY1K型の配列へのポインタは
//ARRAY1Kの1000個の配列の先頭アドレス
ARRAY1K *a = (ARRAY1K*)malloc(sizeof(ARRAY1K) * 1000);
ARRAY1K *b = (ARRAY1K*)malloc(sizeof(ARRAY1K) * 1000);
ARRAY1K *c = (ARRAY1K*)malloc(sizeof(ARRAY1K) * 1000);

}

これで1000x1000の配列a、b、cができあがります。
配列のポインタとポインタのポインタ、ポインタの配列など、ごちゃごちゃになりやすいので、わからなくなったらこのようにtypedefを作ることです。

HeapAllocについては、私は知りません、ごめんなさい。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
無事解決しました。

お礼日時:2002/10/26 18:53

VC++では268435456バイトを超えるデータ領域を持つプログラムは作成できません。


a[10000][10000]だと、配列要素数は100000000個なので、int型だともうオーバーですね。

動的に確保しましょう。
あまりにでかい配列の場合はmalloc()じゃ危ないです。
HeapAlloc()を使った方がいいでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2002/10/24 14:48

そこまで大きいやつは動的に確保しましょうよ。



#include <stdio.h>
#include <malloc.h>

typedef int ARRAY10K[10000];

void main(){

ARRAY10K *array10Kx10K = (ARRAY10K*)malloc(sizeof(ARRAY10K) * 10000);

}

この回答への補足

ご回答ありがとうございます。
C言語は超初心者であるため、根本的に何をやっているのか分かりません。
例えば配列を、a[1000][1000],b[1000][1000],c[1000][1000]ととりたい場合はどうしたらよいでしょうか?
よろしくお願いします。

補足日時:2002/10/24 14:43
    • good
    • 0

エラーの中身くらい書きなさいって。



プロジェクトの設定の中からリンクの設定でスタックサイズを大きく指定してください。

もしくは、配列が static でも構わないのであれば、static int a[10000][10000] みたいに
するのが安直かも。

# VC1.0 ならいざしらず、いまどき small モデルやら near ポインタなんて話は無いですぜ >hinebot
# なんて言って、実は、VC1.0 のことだったり (^^;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
エラーの内容は、びっくりマークがでて「(ファイル名)が原因で、(ファイル名).EXEにエラーが発生しました。」と出て、右の方に"閉じる"と"デバック"が表示されます。

>>プロジェクトの設定の中からリンクの設定でスタックサイズを大きく指定してください。
スタックサイズを大きく指定するとはどういうことでしょうか?スタックサイズという言葉自体見つからないのですが。。
よろしくお願いします。

お礼日時:2002/10/24 14:43

ポインタで扱えるオフセット量をオーバーしているんじゃないでしょうか。



具体的な対処法は分りませんが、ヒントにでもなればと思いまして。
(16ビット処理系で、nearポインタだと0xFFFF[=65535]までです。
a[300][300] だと、300×300 = 90000 ですよね。)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました

お礼日時:2002/10/24 14:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!