c++的map对象赋值问题
上下文情况如下:mapTest是自己定义的一个map容器,里面存放了数据以后,准备存到共享内存中。然后其他构件从共享内存中读取出来。所以就有一个从地址指针转换成map容器...
上下文情况如下:
mapTest是自己定义的一个map容器,里面存放了数据以后,准备存到共享内存中。然后其他构件从共享内存中读取出来。
所以就有一个从地址指针转换成map容器的过程,在这个转换过程中,我使用了下面这条语句,buff为共享内存的始地址,
也是mapTest存在内存中的始地址,stuout是另外定义的一个用来存贮共享内存数据的map对象。整个程序编译没有问题,但是
运行后报错:0x00415b5d处未处理的异常:0xC000005:读取位置*******时发生访问冲突。程序就崩溃了。
memcpy(&stuout,buff,sizeof(mapTest));
修改代码为:
stuout = mapTest;
这样赋值就没有问题,但是不符合上下文要求。
不知道是不是因为map对象拷贝到内存中的时候有其他需要特别注意的地方?例如结束符?在此请教各位高手帮帮小弟。
一楼的回答我之前试过,编译是通不过的:
error C2440: 'type cast' : cannot convert from 'std::map<_Kty,_Ty>' to 'void *'
因为我定义结构体的时候直接定义为非指针变量,所以需要用&来取地址。
若定义为*stuout,按照一楼的写法同样出错,还是同一个错误……希望一楼验证下。 展开
mapTest是自己定义的一个map容器,里面存放了数据以后,准备存到共享内存中。然后其他构件从共享内存中读取出来。
所以就有一个从地址指针转换成map容器的过程,在这个转换过程中,我使用了下面这条语句,buff为共享内存的始地址,
也是mapTest存在内存中的始地址,stuout是另外定义的一个用来存贮共享内存数据的map对象。整个程序编译没有问题,但是
运行后报错:0x00415b5d处未处理的异常:0xC000005:读取位置*******时发生访问冲突。程序就崩溃了。
memcpy(&stuout,buff,sizeof(mapTest));
修改代码为:
stuout = mapTest;
这样赋值就没有问题,但是不符合上下文要求。
不知道是不是因为map对象拷贝到内存中的时候有其他需要特别注意的地方?例如结束符?在此请教各位高手帮帮小弟。
一楼的回答我之前试过,编译是通不过的:
error C2440: 'type cast' : cannot convert from 'std::map<_Kty,_Ty>' to 'void *'
因为我定义结构体的时候直接定义为非指针变量,所以需要用&来取地址。
若定义为*stuout,按照一楼的写法同样出错,还是同一个错误……希望一楼验证下。 展开
3个回答
展开全部
你要知道结构体变量名也是指针,不过这个指针比较特别。(至于怎么特别就得自己去看书了)
将你的代码改为
memcpy(stuout,buff,sizeof(mapTest));
就可以了
将你的代码改为
memcpy(stuout,buff,sizeof(mapTest));
就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
memcpy是按位拷贝,你写的结构体或者类的存储形式是不是和buf的不同,若不同则应该每个项逐一拷贝。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-07-28
展开全部
大哥 你的问题太专业了吧 我就是路过的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询