问题描述
|
我想编写一个函数,它接受一个“ 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”。您通过\'&\'运算符获取地址。