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:大きすぎる配列の割り当て
仮想メモリ領域を含めて5.93Gあります?まぁ、Vistaだから+1Gは必要かな。実効メモリの管理についてはそんなに詳しくないけど、それが原因では…?
Re:大きすぎる配列の割り当て
printf("%d bytes\n", sizeof(STUDENT) * 300);
// 937200 bytes
printf("%d bytes\n", sizeof(CLAS) * 20 * 20);
// 49985600 bytes
となりました。
48.5MB 程度なので、メモリが足りないわけではないと思います。
ただし普通の環境では余裕でスタックに収まらないサイズなので、それが原因でクラッシュしているのではないでしょうか。
malloc や new で確保してあげれば直るかもしれません。
// 937200 bytes
printf("%d bytes\n", sizeof(CLAS) * 20 * 20);
// 49985600 bytes
となりました。
48.5MB 程度なので、メモリが足りないわけではないと思います。
ただし普通の環境では余裕でスタックに収まらないサイズなので、それが原因でクラッシュしているのではないでしょうか。
malloc や new で確保してあげれば直るかもしれません。
Re:大きすぎる配列の割り当て
>ぬるぽんさん
スタックサイズが問題だったようですね。
かねてより疑問だった
buf[4000*10000]とするとクラッシュするが
mallocすると大丈夫という疑問が解けました。
ありがとうございます。
>ゆーずぃさん
徹夜明けだったせいか自分も気づきませんでした・・・・
ありがとうございます。
スタックサイズが問題だったようですね。
かねてより疑問だった
buf[4000*10000]とするとクラッシュするが
mallocすると大丈夫という疑問が解けました。
ありがとうございます。
>ゆーずぃさん
徹夜明けだったせいか自分も気づきませんでした・・・・
ありがとうございます。