坏的分配++;使用带有字符指针的std::string构造函数时 我正在用C++(11)创建一个简单的程序。

坏的分配++;使用带有字符指针的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;

我的问题是名为“loadRoomsFile()”的函数正在将文件中的文本读取到char指针数组,然后返回它

我想把它转换成一个字符串,所以我使用了参数为*char数组的字符串构造函数

所有测试都在显示,缓冲区也显示了正确的数据,但当调用字符串(loadRoomsFile())时,我得到了错误的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;
}
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
则更改变量类型。你有可能编译(由于向后兼容性和其他原因),但这没有多大意义。