来自ifstream的C ++ read():没有指针?

时间:2011-11-17 17:02:10

标签: 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
}

如何使函数(我在这里称之为readData):在读取时不使用指针,或者如果需要使用指针,我会在哪里进行正确的删除?

到目前为止,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的值指向不再存在的东西。

关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:3)

为什么不使用局部变量?

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;
}

此外,参考不能重新定位。因此,赋值将值赋给调用函数传递的 origional intreturnXreturnY 指向局部变量。在上面的代码中,作业会更改mainxmainy

答案 1 :(得分:2)

使用局部变量的简单方法是:

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;
}

答案 2 :(得分:-1)

delete[]没问题。如果你得到一个错误,那不是因为x和y的值指向不再存在的东西,因为它们的值只是整数并且没有指向任何东西。