大規模データの処理について困っています
掲題の通り、大規模データの処理で悩んでおります。
行ベクトル150万、列ベクトル14のCSVファイルを読み込もうとしているのですが、データ数が10万以上になるとVisual C++が勝手に動作を停止してしまいプログラムを実行することができません。
具体的には、CSVファイル上の4列目に記載されている都道府県名のデータを配列で取り、画面に表示しようと、次のようなプログラムを書いているのですが、
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define FNAME "data.csv"
#define NUM 10000
int main(void)
{
FILE *fp;
char buf[256];
char *p_token;
char dat[14][100];
int n;
int i;
long int j;
char *place[NUM][15];
place[NUM][15]=(char*)malloc(sizeof(char)*NUM);
fp = fopen(FNAME,"r");
if (fp == NULL)
{
printf("ファイルをオープンできませんでした\n");
return 0;
}
for(j=0;j<=NUM;j++){
fgets(buf,256,fp) !=NULL;
p_token = strtok(buf, ",");
strcpy(dat[0],p_token);
n=1;
while(-1)
{
p_token = strtok(NULL,",");
if(p_token == NULL)
{
break;
}
strcpy(dat[n],p_token);
n++;
}
if(j!=0)
{
place[j-1][10]=dat[3];
printf("%s \n",place[j-1][10]);
}
}
fclose(fp);
free(place[NUM][15]);
return 0;
}
NUMの数を10万以上にすると、実行してもプログラムが勝手に停止してしまいます。書籍もネットも大分読み漁ったのですが、処置がまったくわからず途方にくれています。
どなたかこうした処理に詳しい方、アドバイスをいただけないでしょうか。よろしくお願い申し上げます。
追記:(1)都道府県名を二次元配列で取っているのは、都道府県名が「大阪府」などと、CSVファイル上で日本語で記載されているからです。
(2)プログラムを実行する際にデータ数を10万以上にすると、CSVファイルをフォルダ内においていなくてもプログラムが停止します(ただしコンパイルエラーはでません)。つまり、メモリの確保に問題があるということになるのでしょうか?