C++ C++;从ifstream读取():没有指针?
假设我有一个结构和一个具有这些结构的二进制表示的文件,我将使用C++ C++;从ifstream读取():没有指针?,c++,pointers,ifstream,C++,Pointers,Ifstream,假设我有一个结构和一个具有这些结构的二进制表示的文件,我将使用ifstream::read()创建一个函数/方法来访问这些二进制数据 下面是一个示例结构: struct MyStruct { int x; //Value interested in int y; //Value interested in int anotherInteger; //Not interested double aDouble; //Not interested } 如何创建函数(
ifstream::read()
创建一个函数/方法来访问这些二进制数据
下面是一个示例结构:
struct MyStruct {
int x; //Value interested in
int y; //Value interested in
int anotherInteger; //Not interested
double aDouble; //Not interested
}
如何创建函数(我在这里称之为readData):在读取时不使用指针,或者,如果需要使用指针,我将把适当的delete放在哪里
到目前为止,我的readData的相关部分如下所示:
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
MyStruct *st = new MyStruct[1];
inFile.seekg(sizeof(MyStruct)*pos);
inFile.read((char*) st, sizeof(MyStruct));
returnX = st[0].x;
returnY = st[0].y;
//delete [] st goes here?
}
我试图取消删除部分的注释,但是我得到了一个分配错误,可能是因为x和y的值指向了不再存在的东西
关于如何解决这个问题有什么想法吗?使用局部变量的简单方法是:
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
MyStruct st;
inFile.seekg(sizeof(MyStruct)*position);
inFile.read((char*)&st, sizeof(MyStruct));
returnX = st.x;
returnY = st.y;
}
delete[]
正常。如果出现错误,并不是因为x和y的值指向的是不存在的东西,因为它们的值只是整数,不指向任何东西。为什么不使用局部变量
void readData(int position, int &returnX, int &returnY) {
ifstream inFile("binaryFile.dat",ios::binary);
inFile.seekg(sizeof(MyStruct)*position);
MyStruct st;
inFile.read((char*) &st, sizeof(MyStruct));
returnX = st.x;
returnY = st.y;
}
int main() {
int mainx, mainy;
readData(0, mainx, mainy);
return 0;
}
此外,引用不能重新定位。因此,赋值将值分配给调用函数传递的原始
int
returnX
和returnY
不指向局部变量。在上面的代码中,赋值更改了mainx
和mainy
我已经尝试过了(即使是在一个新的单独代码上),但仍然出现分段错误。@luishenrique.ln:不应该分段错误。我们能看到调用函数吗?调用函数与您的@MooingDuck完全相同<代码>读取数据(0,缅因州,缅因州)代码>@luishenrique.ln:它不应该出错。故障发生在哪条线路上。你能介入并告诉我们吗?SEGDAULT发生在函数readData结束并返回main之后。我尝试生成另一个二进制文件,您提供的解决方案运行良好,因此我认为它可能与二进制数据创建有关。无论如何,谢谢你。(抱歉,无法提供+rep)