gpt4 book ai didi

c++ - 线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0) xcode 错误

转载 作者:行者123 更新时间:2023-11-30 05:01:29 24 4
gpt4 key购买 nike

我是一名学习如何在 xcode 中使用 c++ 的业余程序员,我一直在尝试创建一个程序,您可以在其中回答所提问题,并且问题会根据您的回答而有所不同。问题是,我不断收到错误消息:Thread 1: EXC_BAD_ACCESS (code=1, address=0x0),我不知道是什么原因造成的。这是我目前的代码:

#include <iostream>
#include <string>
using namespace std;
int main() {


string name;
cout << "what is your name ";
getline (std::cin, name);
string yes;
cout << "ok, " << name << ", do you want to play a game? ";
getline (std::cin, yes);
cout << "\nno " << std::endl;

string input =0;
cin >> input;
string Yes = "yes";
string No = "no";

if (input == No)
{
cout << "ok, sorry" << endl;
}
else if (input == Yes)
{
cout << " a question" << endl;
}
}

最佳答案

解决方案

改变

string input =0;

string input;

input将被构造为空字符串。

那么刚刚发生了什么?

string input =0;

调用 string数字为 0 的构造函数。对于接受整数的字符串,没有直接的构造函数,但是

string(const CharT* s, 
const Allocator& alloc = Allocator() );

足够接近了。整数 0 被视为指向 0 的指针,NULL ,和穷人string尝试从空指针构造自身。这意味着它将从 NULL 复制字符直到它找到一个字符串终止空字符。

幸运的是,无处可去的进程很快就停止了,因为前几千字节的内存几乎总是被标记为禁区,当您尝试访问该区域中的任何地方时,程序就会崩溃。这使得空指针错误几乎可以立即检测到并且非常容易调试。只需等待程序崩溃,然后返回堆栈以查看空指针来自何处。找出它为什么为 null 可能需要更多的工作,但如果编程很容易,那么每个人都会这样做。

为了检验这个假设,我拼凑了一个简单的类来模拟行为而不会崩溃

#include <iostream>

class test
{
public:
test (const char * valp)
{
std::cout << "in char * constructor. Got: " << (void*) valp;
}
};
int main() {
test input =0;
}

输出是

in char * constructor. Got: 0

显示 0 确实足以说服 test接受 0 作为 char指针。

请注意,这只是零附近的特例,最有可能支持好的 ol' #define NULL 0宏观和

test input =1;

被编译器成功捕获为废话并被拒绝。

关于c++ - 线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0) xcode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283701/

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