struct中包含vector<int>时,push_back的时候出现内存错误
2017-08-30 22:01
771 查看
如题,文件中设置 #pragma pack(1) 1字节对齐时,结构体中的vector的首地址一定要是奇数地址!
如 0x00226a8f;如果为偶数地址,会出现内存错误导致程序崩溃。
推测原因,应该是字节对齐的问题导致的。
原先的结构体中,(byte:unsigned char, dword:unsigned int)
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
}
执行时没有问题,但在中间加了一个1字节的byte变量后,导致程序奔溃:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
byte ;
std::vector<int> ;
}
查看 vector的首地址,发现上述地址奇偶性的问题,将byte变量放到vector之后,问题解决:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
byte;
}
如 0x00226a8f;如果为偶数地址,会出现内存错误导致程序崩溃。
推测原因,应该是字节对齐的问题导致的。
原先的结构体中,(byte:unsigned char, dword:unsigned int)
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
}
执行时没有问题,但在中间加了一个1字节的byte变量后,导致程序奔溃:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
byte ;
std::vector<int> ;
}
查看 vector的首地址,发现上述地址奇偶性的问题,将byte变量放到vector之后,问题解决:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
byte;
}
相关文章推荐
- 可自增内存的数组<类似vector的pushback>
- 对于 std::vector<T> , 当T没有赋值运算符函数的时候,如何调用vector push_back?
- c++ <vector> push_back初始化问题
- //编写程序判断一个vector<int>容器所包含的元素是否与一个list<int>容器的完全相同
- vector<IplImage*>类型时push_back问题
- C++ vector<int>向量越界。。。运行段错误退出但gdb未定义到错误位置
- 注册信息的时候出现错误 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey>
- 关于include<vector>编译错误问题
- 【priority_queue<int,vector<int>,greater<int>>优先队列 按照由小到大顺序】
- c# winform 时候调用TeeChart时出现 <请考虑更改其中一个程序集的“嵌入互操作类型”属性>的解决办法
- maven项目出现web.xml is missing and <failOnMissingWebXml> is set to true错误的解决办法
- vector<vector<int>>的输入
- 不允许使用“{...}”对”std::vector<int,std::allocator<int> >“类型的对象进行初始化
- c++ vector push_back 出错或者错误
- c++中vector<int>和vector<int*>的用法比较
- 事件ID 18456:用户<域\计算机名>登录失败。 原因: 基于令牌的服务器访问验证失败,出现基础结构错误
- 判定一个list<int>中的元素和一个vector<int>中的元素是否相等
- priority_queue<int,vector<int>,greater<int>>优先队列 按照由小到大顺序
- xcode编译错误"std::__1::__vector_base_common<true>::__throw_length_error() const"
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义错误处理