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

时间:2012-06-24 10:52:13

标签: 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";
}

输出

Home
Office
Table
Bar
Segmentation fault (core dumped)

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

6 个答案:

答案 0 :(得分:8)

你应该写:

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

答案 1 :(得分:5)

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

string str[4]

然后你的循环必须在以下时间终止:

i < 4

而不是i < 5

答案 2 :(得分:3)

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

答案 3 :(得分:3)

strstring[4],因此它有4个元素,这意味着索引0-3有效。您还访问索引4.

答案 4 :(得分:2)

您正在尝试访问不存在的元素,即str[4],因此会出现细分错误 可能的指数是0-3。

答案 5 :(得分:1)

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