Environ
的类,我创建它并在main中调用它。我发现当我将main中的局部变量名从this_environ
更改为environ
时,我得到一个段错误,其中没有任何Environ变量已初始化。有没有人进入这个或理解为什么这将是一个问题?有趣的是,当我在我的Ubuntu机器上编译时,这不是一个问题...
#include <vector>
#include <map>
#include <iostream>
//#include "Environ.hpp"
// Namespaces
using namespace std;
class Environ {
public:
// Public objects.
vector<unsigned> years_;
void initialise() {
cerr << "entering initialsie" << endl;
years_ = {12,32,23};
}
};
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
Environ this_environ;
this_environ.initialise();
cout << "Finished initialisation" << endl;
system("PAUSE");
return 0;
}
为了重现性,我正在使用gcc版本5.1.0构建Windows 10,并进行以下构建调用
g++ -std=c++0x -O2 -g3 -Wall -c -fmessage-length=0
答案 0 :(得分:2)
我刚刚发现environ
是stdlib中的一个宏,所以调用变量很可能不是一个好主意。在stdlib.h
的第633行定义的宏,或许我应该提到我的GCC来自here
#define sys_errlist _sys_errlist
#define sys_nerr _sys_nerr
#define environ _environ
char *__cdecl ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl gcvt(double _Val,int _NumOfDigits,char *_DstBuf) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl itoa(int _Val,char *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl ltoa(long _Val,char *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl putenv(const char *_EnvString) __MINGW_ATTRIB_DEPRECATED_MSVC2005;