stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?

Meuck 2007-04-22 04:46:56
/*
stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
我在全局对象的构造函数中时候使用 std::list 的时候出错。

虽然下面的代码可能能正常运行。但是我的代码同下面的代码类似,
开头也是可以正确运行,之后加了些代码之后,一使用push_back就出错。(记得是内存越界吧)

后来我使用自已写的list就没问题了。
我的环境是vc6.0 + stlport 4.6.2,是这个环境的问题?还是STL普遍的问题?
或者说还有其它可能?
*/
#include <iostream>
#include <list>
using namespace std;
typedef void (*INIT_FUN)(void);
struct INIT_ADD
{
INIT_ADD( INIT_FUN pfun );
};
struct GLOBAL_DATA
{
static list<INIT_FUN> s_link;
};
list<INIT_FUN> GLOBAL_DATA::s_link;
INIT_ADD::INIT_ADD(INIT_FUN pfun)
{
GLOBAL_DATA::s_link.push_back (pfun);
}



enum {DATA_COUNT = 10};
int g_InitData[DATA_COUNT];
void InitDataFunction()
{
for ( int i = 0;i < DATA_COUNT; ++i)
{
g_InitData[i] = i;
}
}



INIT_ADD g_Add( &InitDataFunction ); //添加初始化函数
int main(int argc, char* argv[])
{
//初始化所有初始化函数
list<INIT_FUN>::iterator iter;
for (iter = GLOBAL_DATA::s_link.begin(); iter != GLOBAL_DATA::s_link.end(); ++iter)
{
(*iter)();
}


for ( int i = 0; i < DATA_COUNT; ++i )
{
cout << g_InitData[i] << endl;
}
return 0;
}

...全文
305 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidongri 2007-04-23
  • 打赏
  • 举报
回复
dev c++
vs 2005
Meuck 2007-04-23
  • 打赏
  • 举报
回复
再等等看有没有确定的答案。
stonepeter 2007-04-22
  • 打赏
  • 举报
回复
VC6对C++的标准支持不够好。用VS.NET 2005吧。
expter 2007-04-22
  • 打赏
  • 举报
回复
不用VC6 用什么好点啊
taodm 2007-04-22
  • 打赏
  • 举报
回复
vc6还是早点扔了吧。
  • 打赏
  • 举报
回复
不太清楚你的问题
不过我用我的编译器直接编译正常运行了
Meuck 2007-04-22
  • 打赏
  • 举报
回复
不过是不一定出错,可能以编译次序有关吧。
因为之前一直不错,之后就是直错。
Meuck 2007-04-22
  • 打赏
  • 举报
回复
我在全局对象的构造函数中时候使用 std::list 的push_back方法时出错。
飞哥 2007-04-22
  • 打赏
  • 举报
回复
不应该叫调用吧

在main之前定义stl标准对象是可以的

65,212

社区成员

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

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