c++文件流结构体怎么读取写入操作\\内存异常

c++文件流结构体如何读取写入操作\\内存错误?

typedef struct CRowShowDataStu{
        int     m_ID;                   //4
        int        m_EnterID;                //4
        string  m_Name;                    //20
        double  m_EyeX;                 //30
        double  m_EyeY;                 //30
        double  m_EyeZ;                 //30
        float   m_EyePoseX;             //20
        float   m_EyePoseY;             //20
        float   m_EyePoseZ;             //20
        int    m_Visable;                //1
        double  m_ModelX;               //30
        double  m_ModelY;               //30
        double  m_ModelZ;               //30
        float   m_ModelPoseX;           //20
        float   m_ModelPoseY;           //20
        float   m_ModelPoseZ;           //20
    }CRowShowData;
    std::vector<CRowShowData> m_RowShowData;
 
        bool CRowShowObj::WriteFile(string FilePath)
{
    CRowShowData Temp;
    Temp.m_ID = 1;
    Temp.m_EnterID = 0;
    Temp.m_Name = "call.ive";
    Temp.m_EyeX = 0.0;
    Temp.m_EyeY = 0.0;
    Temp.m_EyeZ = 0.0;
    Temp.m_EyePoseX = 1.0f;
    Temp.m_EyePoseY = 1.0f;
    Temp.m_EyePoseZ = 1.0f;
    Temp.m_Visable = 1;
    Temp.m_ModelX = 0.0;
    Temp.m_ModelY = -0.5;
    Temp.m_ModelZ = 0.0;
    Temp.m_ModelPoseX = 1.0f;
    Temp.m_ModelPoseY = 1.0f;
    Temp.m_ModelPoseZ = 1.0f;
    m_RowShowData.push_back(Temp);
    Temp.m_ID = 2;
    Temp.m_EnterID = 0;
    Temp.m_Name = "ceep.ive";
    Temp.m_EyeX = 0.0;
    Temp.m_EyeY = 0.0;
    Temp.m_EyeZ = 0.0;
    Temp.m_EyePoseX = 1.0f;
    Temp.m_EyePoseY = 1.0f;
    Temp.m_EyePoseZ = 1.0f;
    Temp.m_Visable = 1;
    Temp.m_ModelX = 0.0;
    Temp.m_ModelY = 0.5;
    Temp.m_ModelZ = 0.0;
    Temp.m_ModelPoseX = 1.0f;
    Temp.m_ModelPoseY = 1.0f;
    Temp.m_ModelPoseZ = 1.0f;
    m_RowShowData.push_back(Temp);
    try
    {
        ofstream file;
        char sz[329];
        file.open(FilePath.c_str());
        vector<CRowShowData>::iterator Temp;
        for(Temp= m_RowShowData.begin();Temp!= m_RowShowData.end();Temp++)
        {
            memset(sz,0,329);
            sprintf(sz, "%4d%4d%20s%30f%30f%30f%20f%20f%20f%1d%30f%30f%30f%20f%20f%20f", \
                &Temp->m_ID, &Temp->m_EnterID,Temp->m_Name.c_str(),\
                &Temp->m_EyeX, &Temp->m_EyeY,&Temp->m_EyeZ,\
                &Temp->m_EyePoseX, &Temp->m_EyePoseY,&Temp->m_EyePoseZ,\
                &Temp->m_Visable,\
                &Temp->m_ModelX,&Temp->m_ModelY,&Temp->m_ModelZ,\
                &Temp->m_ModelPoseX,&Temp->m_ModelPoseY,&Temp->m_ModelPoseZ);
            file.write(sz,329);
        }
        file.close();
    }
    catch(...)
    {
        //TRACE0((LPCTSTR)e.Description());
        return false;
    }
    return true;
}

------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2)输出float用%f,输出double用%lf
出现错误了不会调试吗,gdb,valgrind都可以啊。
------解决思路----------------------
1)为什么sprintf里面全部要取地址&操作,这是为何?
2) 字符数组大小+1 试试