長い間Cを使用していませんが、CSVから2D配列を埋めるのに問題があります。ファイル形式は次のようになります。
ノード、イン、アウト
1,200,10393
..。
これは基本的に、リンクリストの配列表現です。150000個の要素があり、配列を埋めようとすると、「main.exeの0x000000013facb957で未処理の例外:0xC00000FD:スタックオーバーフロー」というエラーが発生します。私は16GBのRAMを搭載した64ビットマシンを使用しており、x64ビルド構成でVS C ++2010Expressを使用しています。
int main(int argc, char *argv[])
{
int counter = 0;
char line [ 1024 ];
int map[150000][2] = {0};
char *comma = ",";
char *token;
int index;
int in, out;
char* end;
int nodeID;
FILE *fp;
fp = fopen("mapsorted.txt","r"); // read mode
if( fp == NULL )
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
//Skip header line
fgets ( line, sizeof line, fp );
while ( fgets ( line, sizeof line, fp ) != NULL) /* read a line */
{
//first part - the index for storage
token = strtok(line,comma);
index = strtol(token,&end,10);
//second part
token = strtok(NULL,comma);
in = atoi(token);
//third part
token = strtok(NULL,comma);
out = atoi(token);
//store in array
map[index][0] = in;
map[index][1] = out;
}
fclose ( fp );
}
小さい配列を割り当てるとコードは機能するように見えますが、これほど大きい場合は失敗します。このサイズの配列を処理するのに十分なメモリが必要だと思います。