首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:string = NULL给出SEGFAULT 11?

C++:string = NULL给出SEGFAULT 11?
EN

Stack Overflow用户
提问于 2015-07-18 08:37:17
回答 2查看 920关注 0票数 0

我今天修改了我的项目,允许它将文件保存在不同的文件夹中,我发现我的程序在启动时崩溃了:

代码语言:javascript
运行
复制
Segmentation fault: 11

因为我在测试我的程序之前引入了太多的修改,所以我开始注释我添加的所有功能,但是没有帮助。我甚至把

代码语言:javascript
运行
复制
cout << "hello world" << endl;
return 0;

作为int main()中的前两行,它仍然没有显示任何内容就崩溃了。

最后,我花了一个小时才找出错误。修改包括声明一个全局变量。

代码语言:javascript
运行
复制
string foldername = NULL;

上面这条线似乎是纯真的,它只是声明了一个全局变量。

然后我尝试了一个简单的程序:

代码语言:javascript
运行
复制
#include <string>

std::string a = NULL;

int main(){
    return 0;
}

而且它在启动时也崩溃了。

为什么声明字符串全局变量为NULL使程序在没有任何信息的情况下悄然崩溃?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-18 08:46:30

std::string --与从C char*字符串继承的相反--始终持有有效字符串。它可能是空的,但不能是空的。如果您尝试使用NULL初始化std::string,它将盲目地从NULL地址复制类似C的字符串,这是未定义的行为。

只管用

代码语言:javascript
运行
复制
std::string a;

然后a将被初始化为空字符串。

票数 6
EN

Stack Overflow用户

发布于 2015-07-18 11:02:08

NULL只分配给指针类型,在C中也是如此。C++的方式是std::nullptr_tnullptr。或者声明指向字符串的指针,如

代码语言:javascript
运行
复制
std::string * a = nullptr;

或者将其留给字符串构造函数处理。

代码语言:javascript
运行
复制
std::string a = "";    // equivalent to std::string a;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31489345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档