坏的分配++;使用带有字符指针的std::string构造函数时 我正在用C++(11)创建一个简单的程序。
我的问题是名为“loadRoomsFile()”的函数正在将文件中的文本读取到char指针数组,然后返回它 我想把它转换成一个字符串,所以我使用了参数为*char数组的字符串构造函数 所有测试都在显示,缓冲区也显示了正确的数据,但当调用字符串(loadRoomsFile())时,我得到了错误的alloc异常,程序停止运行。有人能帮我吗坏的分配++;使用带有字符指针的std::string构造函数时 我正在用C++(11)创建一个简单的程序。,c++,string,out-of-memory,bad-alloc,C++,String,Out Of Memory,Bad Alloc,我的问题是名为“loadRoomsFile()”的函数正在将文件中的文本读取到char指针数组,然后返回它 我想把它转换成一个字符串,所以我使用了参数为*char数组的字符串构造函数 所有测试都在显示,缓冲区也显示了正确的数据,但当调用字符串(loadRoomsFile())时,我得到了错误的alloc异常,程序停止运行。有人能帮我吗 char *loadRoomsFile() { fstream roomsFile; char *buffer; // helper int i = 0;
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;
}
char*loadRoomsFile(){
fstream-roomsFile;
字符*缓冲区;
//助手
int i=0;
cout首先:你应该提供一个新的版本,而不是让我们修改你的代码来构建它。这不尊重我们的努力
第二:分配的字符数与文件大小相同,但在最后一个1之后写入“\0”。因此,这似乎是触发segfault的特定问题
但实际上,主要问题在于你的方法:
- 除非绝对必要,否则你不应该自己分配内存
- 您不应该将整个文件的内容读入字符串(除非您知道它很短)
- 一次不应从文件读取一个字符。或者逐行读取;或者使用管道运算符(如<代码> CIN > MyOpLoo< <代码>)解析数据;或者立即读取整个文件;或者“代码> MAMP())/COD>文件(这不是C++特性,但Linux、Windows、MaOS等支持)。
为什么不首先读入std::string?另外,您可能希望以二进制模式打开文件。然后读取int revert=true;
-huh?请键入安全性-您是在处理int
还是bool
?如果int
则不分配bool
ean。如果bool
则更改变量类型。你有可能编译(由于向后兼容性和其他原因),但这没有多大意义。