更改本地类名时出现 seg 错误

seg fault when I change local class name

本文关键字:seg 错误      更新时间:2023-10-16

当我更改类的名称并且我不明白时,段错误消失了。我构建了一个名为Environ的类,我创建了它并主要调用它。我发现当我将 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 版本 10 在 Windows 5.1.0 上构建,并使用以下构建调用

g++ -std=c++0x -O2 -g3 -Wall -c -fmessage-length=0

我刚刚发现environ是 stdlib 中的一个宏,所以很可能不是一个好主意来称呼变量。stdlib.h的第 633 行定义的宏,也许我应该提到我的 GCC 来自这里

#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;