记录一个问题。
在写c语言读csv文件的时候,由于csv文件为 80w*5, 每个元素是字符串,因此想用一个二维字符串数组存一下,可一查才知道,c语言没有二维字符串数字,因此,准备用5个字符串数组代替,每个字符串数组存储1列。
char dataset_wr[800000][MAX_LINE_SIZE] ;
char dataset_pid[800000][MAX_LINE_SIZE] ;
char dataset_io[800000][MAX_LINE_SIZE] ;
char dataset_path[800000][MAX_LINE_SIZE] ;
char dataset_tr[800000][MAX_LINE_SIZE] ;
一开始觉得没啥,也没超过数组100w的限制,最重要第一次跑通了,数据也读出来了,但是恶梦也开始了。
第二次再跑的时候,一直提示我 不是win32程序,上网查了很多解决办法,未果。
起初以为是dev的编译器问题,后来重装,不行;换一个codeblock,不行;没辙,vs2015吧,不行。。。
最主要 “不是win32”程序很难让我想到是我代码本身的问题,何况我第一遍跑通了呢。
没辙,只能仔细看下代码,发现唯一可能产生问题的地方就是数组了,于是乎用动态申请代替
dataset_wr = NULL;
dataset_wr = (char**)malloc(sizeof(char*)*inumdata); //行数 //每行多大 512
for( m=0; m<inumdata; m++ ){
dataset_wr[m] = (char*)malloc( sizeof(char) * MAX_LINE_SIZE );
}
dataset_pid = NULL;
dataset_pid = (char**)malloc(sizeof(char*)*inumdata);
for( m=0; m<inumdata; m++ ){
dataset_pid[m] = (char*)malloc( sizeof(char) * MAX_LINE_SIZE );
}
dataset_io = NULL;
dataset_io = (char**)malloc(sizeof(char*)*inumdata);
for( m=0; m<inumdata; m++ ){
dataset_io[m] = (char*)malloc( sizeof(char) * MAX_LINE_SIZE );
}
dataset_path = NULL;
dataset_path = (char**)malloc(sizeof(char*)*inumdata);
for( m=0; m<inumdata; m++ ){
dataset_path[m] = (char*)malloc( sizeof(char) * MAX_LINE_SIZE );
}
dataset_tr = NULL;
dataset_tr = (char**)malloc(sizeof(char*)*inumdata);
for( m=0; m<inumdata; m++ ){
dataset_tr[m] = (char*)malloc( sizeof(char) * MAX_LINE_SIZE );
}
然后,就不提示 “不是win32”程序了。。。。但总算程序能正常用了。
心累的一晚。
建议:以后这种大的数组,建议还是动态申请的方式比较好。不要用直接规定大小的那种了。