我有分段错误,我不知道出了什么问题。 多年前,我编写了程序,该程序应该写入我的类中包含的hdd字符串,整数和双精度。
我一直在使用这段代码:
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;
自那时以来没有分段错误/访问违规:) 我想读"进入"(char*)myString.c_str()
是一个问题,正如奇普斯特指出的那样。 谢谢。