与fstream和指针混淆

| 我想编写一个函数,它接受一个“ 0”,对其进行处理,并将信息填充到我在第二个参数中提供的一个“ 1”中。 我的问题是,当我收到调试错误时,我很困惑如何使用指针和fstream:   访问冲突写入位置   0xcccccccc。 这是主要功能:
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;
}
这是我尝试用于解析二进制文件并在struct kfstruct中填充信息的函数:
struct keyframe_struct
{
    int num_views;
    int num_keyframes;
    vector<keyframe> keyframes;
};

int load_from_keyframe_file( ifstream &fin, keyframe_struct &kfstruct )
{

    char keyword[100];

    while ( !fin.eof() )
    {
        fin.getline( keyword, 100, 0 );

        if ( strcmp( keyword, \"views\" ) == 0 )
        {
            fin.read(( char* ) kfstruct.num_views, sizeof( int ) );
        }

        else if ( strcmp( keyword, \"keyframes\" ) == 0 )
        {
            fin.read(( char* ) kfstruct.num_keyframes, sizeof( int ) );
        }

    }

}
你能告诉我我在做什么错吗?我确定我在这里只是个初学者,所以在这里犯了一些大错误,但我仍然不清楚我该怎么做以及我不应该使用指针做什么。     
已邀请:
        您忘记填写您的字段地址:
fin.read(( char* ) &kfstruct.num_views, sizeof( int ) );
                  ^^^
[顺便说一句,从维护的角度来看,最好做
sizeof(kfstruct.num_views)
。因此,如果类型发生更改,您的代码仍然可以使用。]     
        代替
( char* ) kfstruct.num_views
采用
( char* ) (&kfstruct.num_views)
同样在另一个地方。 否则,您正在写入的地址等于您的int的值的位置。你不要那个您希望将地址转换为“ 8”。您通过\'&\'运算符获取地址。     

要回复问题请先登录注册