Hiroki Kashiwazaki <reo@cc.hokudai.ac.jp> writes:

> こういった配列の制限は主記憶容量(と他のプロセスが占有する資源)で
> 定まるのか、それとも何か他の要素があるのかどうにも良く分かっていま
> せん。皆様からの情報をお寄せ頂ければ幸いです。

Linux だと、

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define ASIZE 3000000

struct packet {
        int nodenumber;
        int destination;
        int source;
        char body [ 256 ];
} ary[ASIZE];

int main()
{
        char buf[100];
        pid_t pid = getpid();
        (void)sprintf(buf, "cat /proc/%d/maps", pid);
        (void)system(buf);
        (void)printf("\n&(ary[%d].body[255]) = %08x\n",
                        ASIZE-1, &(ary[ASIZE-1].body[255]));
        return 0;
}

を実行した結果は、

08048000-08049000 r-xp 00000000 08:01 579        /home/tesigana/tmp/a.out
08049000-0804a000 rw-p 00000000 08:01 579        /home/tesigana/tmp/a.out
40000000-40016000 r-xp 00000000 08:01 210953     /lib/ld-2.2.2.so
40016000-40017000 rw-p 00015000 08:01 210953     /lib/ld-2.2.2.so
40017000-40018000 rw-p 00000000 00:00 0
40025000-4014b000 r-xp 00000000 08:01 32484      /lib/i686/libc-2.2.2.so
4014b000-40151000 rw-p 00125000 08:01 32484      /lib/i686/libc-2.2.2.so
40151000-40155000 rw-p 00000000 00:00 0
bfffe000-c0000000 rwxp fffff000 00:00 0

&(ary[2999999].body[255]) = 37f0a81f

ですので、静的配列を大きくとりすぎると /lib/i686/libc-2.2.2.so が
貼り付いている領域を破壊してしまうのでないかと。
---------------------------------------------------------------------
                                           tesigana@mtf.biglobe.ne.jp