我很长时间没有使用 C,并且在从 CSV 填充 2D 数组时遇到了问题。文件格式是这样的:
节点,输入,输出
1,200,10393
...
这本质上是一个链表的数组表示。有 150000 个元素,每当我尝试填充数组时,都会收到一条错误消息,提示“main.exe 中 0x000000013facb957 处的未处理异常:0xC00000FD:堆栈溢出。” 我在具有 16GB RAM 的 64 位机器上,并且正在使用具有 x64 构建配置的 VS C++ 2010 Express。
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 );
}
当我分配一个较小的数组时,代码似乎可以工作,但是当它这么大时就失败了。我想我应该有足够的内存来处理这个大小的数组。