#include <stdio.h> #include <stdlib.h> #include <string> #include <fstream> #include <sstream> #include <math.h> #define MAX_OBJ_NUM 6 using namespace std; string ConstructFileName(string path, int filenum, string filetype) { string currentnum; stringstream ss; ss.clear(); ss << filenum; ss >> currentnum; return (path + currentnum + filetype); } int main() { int out[4 * MAX_OBJ_NUM]; int FirstFileNum = 1; int temp; int count = 0; FILE* fp; for (int i = 0; i < 1018; i++) { string File = ConstructFileName("E:\workspace\Rect_out\666\", FirstFileNum, ".txt"); fp = fopen((char*)File.data(), "r"); if (fp == NULL) printf("Open %s fail!\n", (char*)File.data()); else cout << "open" << File << endl; count = 0; while (1 == fscanf(fp, "%d ", &temp)) { out[count] = temp; count++; } /*...*/ fp = NULL; FirstFileNum++; } fclose(fp); system("pause"); return 0; }
E:\workspace\Rect_out\666\ 下面存着以数字命名的1-1018个txt文件,txt里面存着4*6=24个整数,每次运行到第510次的时候都原因是stream!=NULL崩溃,验证过txt文件没有问题,文件名路径也正确,就是读入不了,510又不是512这样的2的几次方,实在想不出原因来,还望各位前辈能指点一下。
解决方案
10
fp = NULL;
fclose(fp); 位置互换一下试试?
你这么多文件没关闭,居然没出错,也是很厉害的
fclose(fp); 位置互换一下试试?
你这么多文件没关闭,居然没出错,也是很厉害的
30
你在for里面fopen, 在外面fclose?
匹配吗?
另外建议把fp放在for里面, 保持良好的作用域编码规范
匹配吗?
另外建议把fp放在for里面, 保持良好的作用域编码规范
30
把
fp = NULL;
改成
fclose
C/C++没有GC, 必须手动释放资源, 置空没用, 只是清空变量而已
fp = NULL;
改成
fclose
C/C++没有GC, 必须手动释放资源, 置空没用, 只是清空变量而已
20
文件句柄的可打开个数,由一个系统参数控制,open files
http://blog.csdn.net/hejinjing_tom_com/article/details/38760233
http://blog.csdn.net/hejinjing_tom_com/article/details/38760233
20
28 行:fp=NULL
44行改成:fclose(fp);fp=NULL
48行:删掉
44行改成:fclose(fp);fp=NULL
48行:删掉