大きなメモリー使えない理由は,スタック領域が狭いことによる.先に述べたようにロー
カル変数はスタック領域を使うため,それに制限されるのである.大きなスタック領域を
用意するわけにもいかない.これは,様々なプログラムのローカル変数が使う場所で,こ
こに大きな領域を用意すると,プログラム領域などが不足する.大きなスタック領域を用
意しても,ほとんどの場合は使われないだろう.
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int a[1024*1024*10];
6
7 a[0]=1;
8 printf("a[0]=%d\n",a[0]);
9
10 return 0;
11 }
セグメンテーション違反です
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(void)
5 {
6 int *a;
7
8 a=malloc(sizeof(int)*1024*1024*10);
9
10 a[0]=1;
11 printf("a[0]=%d\n",a[0]);
12
13 free(a);
14
15 return 0;
16 }
a[0]=1
malloc()関数を使って,メモリーを確保している.ただし,この関数でいつも思い 通りのメモリーを確保できるとは限らない.この関数は,メモリー確保に失敗した場合,NULLポ インターを返す.したがって,教科書のリスト4.8のように,エラー処理を書かなくては ならない.