我今天修改了我的项目,允许它将文件保存在不同的文件夹中,我发现我的程序在启动时崩溃了:
Segmentation fault: 11
因为我在测试我的程序之前引入了太多的修改,所以我开始注释我添加的所有功能,但是没有帮助。我甚至把
cout << "hello world" << endl;
return 0;
作为int main()
中的前两行,它仍然没有显示任何内容就崩溃了。
最后,我花了一个小时才找出错误。修改包括声明一个全局变量。
string foldername = NULL;
上面这条线似乎是纯真的,它只是声明了一个全局变量。
然后我尝试了一个简单的程序:
#include <string>
std::string a = NULL;
int main(){
return 0;
}
而且它在启动时也崩溃了。
为什么声明字符串全局变量为NULL使程序在没有任何信息的情况下悄然崩溃?
发布于 2015-07-18 08:46:30
std::string
--与从C char*
字符串继承的相反--始终持有有效字符串。它可能是空的,但不能是空的。如果您尝试使用NULL初始化std::string
,它将盲目地从NULL地址复制类似C的字符串,这是未定义的行为。
只管用
std::string a;
然后a
将被初始化为空字符串。
发布于 2015-07-18 11:02:08
NULL
只分配给指针类型,在C中也是如此。C++的方式是std::nullptr_t
或nullptr
。或者声明指向字符串的指针,如
std::string * a = nullptr;
或者将其留给字符串构造函数处理。
std::string a = ""; // equivalent to std::string a;
https://stackoverflow.com/questions/31489345
复制相似问题