C++ 与fstream和指针混淆

C++ 与fstream和指针混淆,c++,visual-studio-2010,pointers,fstream,ifstream,C++,Visual Studio 2010,Pointers,Fstream,Ifstream,我想写一个函数,它接受fstream,处理它,并在第二个参数中提供的struct中填充信息 我的问题是,当我遇到调试错误时,我对如何使用指针和fstream感到困惑: 访问冲突写入位置 0xCCCC 以下是主要功能: int main() { keyframe_struct kfstruct; string ifile = "filename"; ifstream fin( ifile, ios::binary ); load_from_keyframe_fi

我想写一个函数,它接受
fstream
,处理它,并在第二个参数中提供的
struct
中填充信息

我的问题是,当我遇到调试错误时,我对如何使用指针和fstream感到困惑:

访问冲突写入位置 0xCCCC

以下是主要功能:

int main()
{
    keyframe_struct kfstruct;

    string ifile = "filename";
    ifstream fin( ifile, ios::binary );

    load_from_keyframe_file( fin, kfstruct );
    fin.close();

    cout << kfstruct.num_keyframes << endl;

    return 0;
}
intmain()
{
关键帧结构kfstruct;
字符串ifile=“filename”;
ifstream-fin(ifile,ios::binary);
从关键帧文件加载关键帧文件(fin,kfstruct);
fin.close();

难道你忘了记下你的字段地址了吗

fin.read(( char* ) &kfstruct.num_views, sizeof( int ) );
                  ^^^

[另一方面,请注意,从维护的角度来看,最好执行
sizeof(kfstruct.num\u视图)
。因此,如果类型发生更改,代码仍能工作。]

您忘记了记录字段的地址:

fin.read(( char* ) &kfstruct.num_views, sizeof( int ) );
                  ^^^
[另一方面,请注意,从维护的角度来看,最好执行
sizeof(kfstruct.num_视图)
。因此,如果类型发生更改,您的代码仍然可以工作。]

而不是

( char* ) kfstruct.num_views
使用

同样,在另一个地方

否则,您正在写入地址等于int值的位置。您不希望这样。您希望将地址转换为
char*
。您通过“&”运算符获取地址。

而不是

( char* ) kfstruct.num_views
使用

同样,在另一个地方


否则,您正在写入地址等于int值的位置。您不希望这样。您希望将地址转换为
char*
。您通过“&”运算符获取地址。

您知道访问冲突的确切位置吗?0xCCCC似乎是未初始化的值,您打开的文件不是文本文件吗?我相信是的。如果是这样,你应该把它当作文本文件,而不是二进制文件。你知道你到底在哪里有访问冲突吗?0xCCCC似乎没有初始化的值不是你打开的文件,不是文本文件?我相信是。如果是这样,你应该把它当作文本文件,而不是二进制文件。你和奥利都写了相同的答案,除了对于括号。有括号和没有括号有什么区别吗?@zsero:没有,但就我的口味而言,用括号更容易阅读,更清楚。只是口味和风格的问题。除了括号之外,你和奥利都写了相同的答案。有括号和没有括号有什么区别吗?@zsero:没有,但就我的口味而言,答案更清楚你和Armen都写了相同的答案,除了括号。有括号和没有括号有什么区别吗?你和Armen都写了相同的答案,除了括号。有括号和没有括号有什么区别吗?