stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
/*
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;
}
[解决办法]
不应该叫调用吧
在main之前定义stl标准对象是可以的
[解决办法]
不太清楚你的问题
不过我用我的编译器直接编译正常运行了
[解决办法]
vc6还是早点扔了吧。
[解决办法]
不用VC6 用什么好点啊
[解决办法]
VC6对C++的标准支持不够好。用VS.NET 2005吧。
[解决办法]
dev c++
vs 2005