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都写了相同的答案,除了括号。有括号和没有括号有什么区别吗?