当我更改类(class)名称并且不理解时,段错误就消失了。我建立了一个名为Environ
的类,并创建它并在主目录中调用它。我发现的是,当我将main中的局部变量名称从this_environ
更改为environ
时,出现了段错误,其中我的Environ变量均未初始化。有没有人参加这个 session 或了解为什么这会是一个问题?有趣的是,当我在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
最佳答案
我刚刚发现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;
关于c++ - 我更改本地类名称时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50557744/