C++: string = NULL gives SEGFAULT 11?
C++: string = NULL gives SEGFAULT 11?
我今天修改了我的项目,允许它在不同的文件夹中保存文件,我发现我的程序在启动时崩溃了:
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会使程序在没有任何信息的情况下静默崩溃?
std::string
-与从C char*
继承的字符串相反-始终保存有效的字符串。它可以为空,但不能为NULL。如果您尝试用NULL初始化std::string
,它将尝试盲目地从NULL地址复制c类字符串,这是未定义的行为。
只使用
std::string a;
,然后a
将被初始化为空字符串。
NULL
只分配给指针类型,在C中也是如此。c++的方式是std::nullptr_t
或nullptr
。声明指向字符串的指针,如
std::string * a = nullptr;
或者留给字符串构造函数
std::string a = ""; // equivalent to std::string a;
相关文章:
- C++中带有List类的迭代器Segfault
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::partition segfault issue
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- 检查nullptr是否100%保护内存布局不受segfault影响
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 为什么优化大型 std::vector 数组会导致 SegFault?
- C++segfault,可重复的例子
- 带有zip_source_buffer的libzip会导致数据损坏和/或segfault
- 导致SegFault C++的析构函数
- 从引用的Vector获取SEGFAULT
- 尝试读取/写入Graphviz DAG值的工作证明会导致segfault
- Segfault如果更改派生类的指针值
- SegFault deleting QTreeWidgetItem
- PyImport_Import segfault
- 添加#pragma循环后出现Segfault
- 使用 gmock 时的 SegFault
- C 多线程,在并行多个线程时获得SegFault
- C++: string = NULL gives SEGFAULT 11?