直接上代码吧。
Test.h
#pragma once
#include <vector>
class Test
{
public:
Test(void);
~Test(void);
static std::vector<int> testIntVector;
};
Test.cpp
#include "StdAfx.h"
#include "Test.h"
Test testObj;
std::vector<int> Test::testIntVector;
Test::Test(void)
{
testIntVector.push_back(1);
testIntVector.push_back(11);
testIntVector.push_back(111);
}
Test::~Test(void)
{
}
原来问题出现在static的那个类成员上。大家知道static类成员在cpp中必须定义一次,上方代码里也的确这样做了。
不过,在这个定义上方还有一个类的对象声明,因为类的对象声明会导致该类构造函数的执行,而上面的构造函数里使用了static类成员,此时该static类成员还没有被定义,所以使用时就出问题了。
解决办法就是把上面cpp文件中的类对象声明与static类成员定义前后颠倒一下。
至于为什么debug模式下没有问题,目前还不得而知。还望赐教!
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
此外,@rabbit729 还提供了另一种只在Release模式下出现的问题。
http://blog.csdn.net/rabbit729/article/details/7193381
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
typedef struct _structBB
{
int i;
vector<int> vBBs;
}BB;
int _tmain(int argc, _TCHAR* argv[])
{
BB bb;
memset(&bb,0,sizeof(BB));
bb.vBBs.push_back(1);
return 0;
}
由于对结构体变量使用了memset函数,如果结构体中有vector这样的类型,使用memset会导致结构体中的某些信息丢失,从而在使用push_back函数插入数据时产生异常中断。