我正在用C ++(11)创建一个简单的程序。
我的问题是名为" loadRoomsFile()"正在将文本从文件读取到char指针数组,然后将其返回。
我想将它转换为字符串,所以我使用了字符串构造函数,参数为* char array。
所有测试都显示,缓冲区也显示正确的数据但是在调用string(loadRoomsFile())时,我得到bad_alloc异常并且程序停止运行。任何人都可以帮助我吗?
char *loadRoomsFile() {
fstream roomsFile;
char *buffer;
// helper
int i = 0;
cout << "TEST 1" << endl;
roomsFile.open("rooms.txt");
cout << "TEST 2" << endl;
if(roomsFile.is_open()) {
cout << "TEST 3" << endl;
roomsFile.seekg(0, ios::end);
cout << "TEST 4" << endl;
buffer = new char[roomsFile.tellg()];
cout << "TEST 5" << endl;
roomsFile.seekg(0, ios::beg);
cout << "TEST 6" << endl;
while(!roomsFile.eof()) {
cout << "TEST WHILE" << endl;
buffer[i] = roomsFile.get();
i++;
}
cout << "TEST 7" << endl;
}
roomsFile.close();
cout << "TEST 8" << endl;
buffer[i] = '\0';
cout << "TEST 9" << endl;
cout << buffer << endl;
return buffer;
}
/*
* GENERAL FUNCTION
*/
int main() {
// Variables
int currentSection; // option choosed in Main Menu
int revert = true; // used for going back in time XD
//string roomsData; // used for storage of data from file
vector<Room> rooms;
cout << "----------------------------------------------------------------" << endl;
cout << "Conference Room Manager ver. 0.1" << endl;
cout << "Component 1/4, Bartosz Kubacki/Bartlomiej Urbanek" << endl;
cout << "----------------------------------------------------------------" << endl;
cout << endl;
// load all data from files
cout << "TEST MAIN" << endl;
string roomsData(loadRoomsFile());
return 0;
}
谢谢!
答案 0 :(得分:2)
首先:您应该提供Minimal, Complete and Verifiable example,而不是让我们必须更正您的代码甚至构建它。这并不尊重我们的努力。
第二:你分配的文件大小与文件大小一样多,但是你写了&#39; \ 0&#39;在最后一次之后1.这似乎是触发段错误的具体问题。
但实际上,主要问题在于您的方法:
std::getline()
逐行阅读;或使用管道运算符解析数据(如cin >> my_float
);或立即阅读整个文件;或mmap()
文件(不是C ++功能,但Linux,Windows,MacOS和其他支持)。