Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从ifstream读取():没有指针?_C++_Pointers_Ifstream - Fatal编程技术网

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)