我今天修改了我的项目,允许它将文件保存在不同的文件夹中,我发现我的程序在启动时崩溃了:
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
因为我在测试程序之前引入了很多更改,所以我开始注释掉我添加的所有功能,但没有帮助.我甚至放了
cout << "hello world" << endl;
return 0;
Run Code Online (Sandbox Code Playgroud)
作为前两行int main(),它仍然没有显示任何东西而崩溃.
最后,我花了一个小时来弄清楚错误.修改包括声明全局变量
string foldername = NULL;
Run Code Online (Sandbox Code Playgroud)
上面的一行似乎是无辜的,它只是声明一个全局变量.
然后我尝试了一个简单的程序:
#include <string>
std::string a = NULL;
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在启动时也崩溃了.
为什么将字符串全局变量声明为NULL会使程序在没有任何信息的情况下静默崩溃?
本std::string-作为相反从C继承char*串-始终持有有效的字符串.它可能是空的,但不能为NULL.如果你尝试std::string用NULL 初始化它会盲目地从NULL地址复制类似C的字符串,这是未定义的行为.
只是用
std::string a;
Run Code Online (Sandbox Code Playgroud)
然后a将初始化为空字符串.