2

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

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

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

输出

Home
Office
Table
Bar
Segmentation fault (core dumped)

分段错误(核心转储)的意义是什么。我搜索了一下,当你尝试访问未分配的内存时,似乎出现了这样的错误,那么,上面的代码有什么问题?

4

6 回答 6

9

你应该写:

for (int i = 0; i<4; i++) //0,1,2,3 = total 4 values
{
    cout << str[i] << "\n";
}
于 2012-06-24T10:53:43.020 回答
5

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

string str[4]

那么你的循环必须在以下情况下终止:

i < 4

而不是i < 5.

于 2012-06-24T10:59:09.093 回答
3

计数器应该从零到三。For 循环需要修改。

于 2012-06-24T10:57:42.277 回答
3

str是 a string[4],所以它有 4 个元素,这意味着索引 0-3 是有效的。您也在访问索引 4。

于 2012-06-24T10:58:59.443 回答
2

您遇到分段错误是因为您尝试访问不存在的元素,即str[4] 可能的索引是从 0-3。

于 2012-08-11T05:39:07.697 回答
1

您正在访问超出数组末尾的数据。str是一个大小为 4 的数组,但您正在访问循环中的第五个元素,这就是您遇到 seg 错误的原因

于 2012-06-24T10:58:36.220 回答