VC6.0中deque的erase函数的问题

顶着瓜皮的猫 2009-04-27 11:40:27
VC6.0中deque的erase函数的问题:
看下面的代码:

struct AA
{
char szBuf[1400+1];
int a;
};
void test()
{
std::deque<AA> myDeque;

AA myAA;
strcpy(myAA.szBuf,"123456789");
myAA.a = strlen(myAA.szBuf);
myDeque.push_back(myAA);

int i = myDeque.size();
std::deque<AA>::iterator it = myDeque.begin();

myDeque.erase(it);//设断点调试到这一步就完蛋了,但编译没有问题.如果把结构AA中的szbuf改小一点,比如说小于1300,就不会出现错误.
i = myDeque.size();
}

我的环境是VC6.0sp6,在VC6.0sp6中出现上面的问题:结构中的buf大于一定值,并且deque中只有一个元素时,用erase就会出错.

我用VS2008运行上面的代码,没有出现错误,把buf大小改的更大,也不会报错,不知道这是什么问题?
...全文
471 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond071 2009-04-28
  • 打赏
  • 举报
回复
既然VS2008不出问题,那为什么不在VS2008下做呢?VC6的时代,STL的版本也相对要旧,有些问题也是可能的,既然有问题不如就换新的环境啊。
ysysbaobei 2009-04-28
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
myDeque.erase(it);//设断点调试到这一步就完蛋了,但编译没有问题.如果把结构AA中的szbuf改小一点,比如说小于1300,就不会出现错误.

鬼知道又是Vc6什么问题。
天天测bug,线程堆栈也够用的。你换个编译器得了。
hjjdebug 2009-04-28
  • 打赏
  • 举报
回复
帮顶,我也想知道为什么?
lingyin55 2009-04-27
  • 打赏
  • 举报
回复
修改vc的栈大小

VC++默认的栈空间是1M,有两个方法更改

a. link时用/STACK指定它的大小,或者在.def中使用STACKSIZE指定它的大小

b. 使用控制台命令“EDITBIN”更改exe的栈空间大小。

例如:打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最大值和commit。

注意:reserve最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间。
顶着瓜皮的猫 2009-04-27
  • 打赏
  • 举报
回复
VC6下deque好像本来就有问题吧,该怎么解决下呢?高手快点出现吧.我的需求是:大量的尾插头取,还会有不少的遍历删除中间项.用list和vector满足不了我的需要.注:上面的问题list和vector在VC6下那样做不会出现问题!!!!!
lingyin55 2009-04-27
  • 打赏
  • 举报
回复
myDeque.erase(it);//设断点调试到这一步就完蛋了,但编译没有问题.如果把结构AA中的szbuf改小一点,比如说小于1300,就不会出现错误.

这个szBuf[1400+1]; 数组时一个局部变量,可能在vc6里面系统分配给程序栈空间太小了,你可以把栈空间设置大一点看看会不会出错。
liliangbao 2009-04-27
  • 打赏
  • 举报
回复
编译器的问题吧~
等高手~

65,210

社区成员

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

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