【C++、VS2010】map和string问题

yuancuo0024 2018-03-08 09:45:36
分不多,请各位见谅,麻烦了,十分感谢!

还有2个问题:1、map、set这类占用的内存,在作用域结束之前,有没有较有效的方法能提前解除它们对系统内存的占用呢?
2、我最近做小论文编工程,发现一个问题。就是我之前保存数据是使用的map<int,vector<int>>在VS2010+win32release下完全正常运行,后面由于数值太大不能再使用int,就用的map<string,vector<int>>,然而程序在win32下release就出问题了,工程一运行很快就自动退出了,也没有任何报错,设断点调试查看,发现是insert数据到map中时,map中已存在的数剧就是莫名其妙的出错,后面改为在x64平台下release就正常了,运行结果正确。。。。。有人知道这是为啥么?同样的,使用set<string>时也会出现同样的问题。。。。。好心累

谢谢各位了!!!
...全文
559 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-09
  • 打赏
  • 举报
回复
利用{}限制map,set的作用域即可。比如: { map<int,int> mii; mii[2]=3; } //在此之后,mii即被自动析构 理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 另外,学会使用数据断点:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
mstlq 2018-03-08
  • 打赏
  • 举报
回复
无代码无真相,无法帮到楼主咯
狐狸小十 2018-03-08
  • 打赏
  • 举报
回复
vector和string 有shrinktofit方法,自适应元素大小,map不需要 不知道你代码有没有问题,如果是因为内存不足,就把数据保存在硬盘上,或者上数据库

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧