gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:41 26 4
gpt4 key购买 nike

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

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 将被初始化为空字符串。

关于C++:string = NULL 给出 SEGFAULT 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com