大きすぎる配列の割り当て

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shiro4ao

大きすぎる配列の割り当て

#1

投稿記事 by shiro4ao » 14年前

CLAS構造体の配列の中のSTUDENT構造体にアクセスしたかったのですが
CLAS配列の要素を大きくするとクラッシュしてしまいました。
なにか原因があるのでしょうか?
ちなみにCLAS配列の要素は20×20ほど準備しておきたかったです。

コンパイラはBorland C++ Compiler
処理系は Windows Vista SP2

=========================コード=======================================
#include <stdio.h>
#include <string.h>
#include <windows.h>



typedef struct{
int count;
char a[512];
char b[512];
char c[512];
char d[512];
char e[10];
int f[6];
char g[1024];
int h;
int i;
int j;
}STUDENT;


typedef struct{
STUDENT st[40];
int count;
}CLAS;

int main()
{
//csv読み書き用の配列
STUDENT table[300];

//格納先
CLAS matrix[20][20];          


matrix[1][1].st[1].count=1;
printf("%d",matrix[1][1].st[1].count);
return 0;
}
==============================================================================

ゆーずぃ

Re:大きすぎる配列の割り当て

#2

投稿記事 by ゆーずぃ » 14年前

仮想メモリ領域を含めて5.93Gあります?まぁ、Vistaだから+1Gは必要かな。実効メモリの管理についてはそんなに詳しくないけど、それが原因では…?

shiro4ao

Re:大きすぎる配列の割り当て

#3

投稿記事 by shiro4ao » 14年前

たしかに、ありえないほどメモリを使っています。
無駄に使わないように変更してみようと思います。
ありがとうございました。

めるぽん

Re:大きすぎる配列の割り当て

#4

投稿記事 by めるぽん » 14年前

printf("%d bytes\n", sizeof(STUDENT) * 300);
// 937200 bytes

printf("%d bytes\n", sizeof(CLAS) * 20 * 20);
// 49985600 bytes

となりました。
48.5MB 程度なので、メモリが足りないわけではないと思います。
ただし普通の環境では余裕でスタックに収まらないサイズなので、それが原因でクラッシュしているのではないでしょうか。
malloc や new で確保してあげれば直るかもしれません。

ゆーずぃ

Re:大きすぎる配列の割り当て

#5

投稿記事 by ゆーずぃ » 14年前

失礼、寝ぼけてKbyteを基本単位にしてました…m(__)m

shiro4ao

Re:大きすぎる配列の割り当て

#6

投稿記事 by shiro4ao » 14年前

>ぬるぽんさん
スタックサイズが問題だったようですね。

かねてより疑問だった
buf[4000*10000]とするとクラッシュするが
mallocすると大丈夫という疑問が解けました。
ありがとうございます。

>ゆーずぃさん
徹夜明けだったせいか自分も気づきませんでした・・・・
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る