c ++中的分段错误(核心转储)

Jat*_*tin 2 c++ linux segmentation-fault

执行时此代码显示预期输出,但最后打印segmentation fault (core dumped):

string str[4] = {
    "Home",
    "Office",
    "Table",
    "Bar"
};

for (int i = 0; i<5; i++)
{
    cout << str[i] << "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

Home
Office
Table
Bar
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

分段错误(核心转储)的重要性是什么?我搜索了,当你试图访问未分配的内存时,似乎发生了这样的错误,所以,上面的代码出了什么问题?

Roe*_*rel 9

你应该写:

for (int i = 0; i<4; i++) //0,1,2,3 = total 4 values
{
    cout << str[i] << "\n";
}
Run Code Online (Sandbox Code Playgroud)


Nad*_*oli 5

C++数组是基于0的,所以你不能访问str [4],因为它的索引范围是0-3.
你分配了一个数组,长度为4:

string str[4]
Run Code Online (Sandbox Code Playgroud)

然后你的循环必须终止:

i < 4
Run Code Online (Sandbox Code Playgroud)

而不是i < 5.