c ++,从文件中读取字符串,分段错误

c++, reading string from file, segmentation fault

我遇到了分段错误,我不知道出了什么问题。 多年前我写了一个程序,它应该写在我的 类.

中包含的硬盘字符串、整数和双精度数上

我一直在使用这段代码:

class Ttimes {
public:
  string name;
};

class R {
public:
  string name;
  vector<Ttimes> ttt;
};

vector<R>  rrr;
// while writing:

string file_name("C:\abc\example.ttt");
fstream f;
f.open(file_name.c_str(), ios::out | ios::binary);
if (f) {
  f.write((char *)&rrr.size(), sizeof(rrr.size()));

  for (int i = 0; i < rrr.size(); i++) {
    myString = rrr[i].name;

    int stringSize = myString.size();
    f.write((char *)&stringSize, sizeof(stringSize));
    f.write(myString.c_str(), myString.size());

    f.write((char *)&rrr[i].ttt.size(), sizeof(rrr[i].ttt.size()));

    for (int j = 0; j < rrr[i].ttt.size(); j++) {
      myString2 = rrr[i].ttt[j].name;

      int stringSize2 = myString2.size();

      f.write((char *)&stringSize2, sizeof(stringSize2));
      f.write(myString2.c_str(), myString2.size());
    } // end for j

  } // end for i

  f.close();
} // end if f

// while reading:

rrr.clear()

string file_name("C:\abc\example.ttt");
fstream f;
f.open(file_name.c_str(), ios::in | ios::binary);
if (f) {
  int howManyR;
  f.read((char *)&howManyR, sizeof(howManyR));

  for (int i = 0; i < howManyR; i++) {
    R empty;
    RRR.push_back(empty);
    int stringSize;
    string myString;

    f.read((char *)&stringSize, sizeof(stringSize));
    myString.resize(stringSize);

    f.read((char *)myString.c_str(), stringSize);

    rrr[i].name = myString;
    rrr[i].ttt.clear();

    Ttimes emptyT;

    int vectorTTTsize;
    r.read((char *)&vectorTTTsize, sizeof(vectorTTTsize));

    for (int j = 0; j < vectorTTTsize; j++) {
      rrr[i].ttt.push_back(emptyT);

      string myString2;
      int stringSize2;
      f.read((char *)&stringSize2, sizeof(stringSize2));
      myString2.resize(stringSize2);
      f.read((char *)myString2.c_str(), stringSize2);
      rrr[i].ttt[j].name = myString2;
    } // end for j

  } // end for i

  f.close();
}

一切正常(一年 1.5 年!)但几天前我开发了代码 - 我添加了另一个矢量 R 并复制粘贴相同的读写代码。从那时起,我不时遇到分段错误。当我尝试使用 debbuger - 它永远不会显示相同的行:/我是自学成才的初学者和为自己编程所以请怜悯;)

我已经阅读了您的答案,在书籍中搜索并改变了阅读写作的整体观念:) 现在当我写的时候我使用:

int stringSize=text.length()*sizeof(char);
file.write(reinterpret_cast<char*>(&stringSize),sizeof(stringSize));
file.write(text.c_str(),stringSize);

当我阅读时,我使用:

int stringSize=0;
string text;
plik.read(reinterpret_cast<char*>(&stringSize),sizeof(stringSize));
char * tempCharArray = new char[stringSize+1]{};
plik.read(tempCharArray,stringSize);
text=tempCharArray;
delete [] tempCharArray;

从那以后没有分段 fault/access 违规 :) 正如 Chipster 指出的那样,我想阅读 "into" (char*)myString.c_str() 是个问题。 谢谢