分段故障c ++为什么我的程序给我分段错误

时间:2017-07-18 02:22:00

标签: c++

为什么我的代码有分段错误?我想看看字符串中是否有两个相同的字母。但是怎么会出现分段错误呢?

#include<iostream>
#include<cstring>
using namespace std;

bool match(char[], int);

int main()
{
    char word[20];
    cout << "Enter a word: ";
    cin >> word;
    int length = strlen(word);
    if (match(word, length)) cout << "It has two letters that are the same" <<
        endl;
    else cout << "There is no same letters" << endl;
    return 0;
}

bool match(char word[], int length)
{
    bool found = false;
    for (int i = 0; i < length; i++)
    {
        for (int j = 1; i < length; j++)
        {
            if (j <= i || j == length || i == length) continue;
            if (word[i] == word[j]) found = true;
        }
    }
    return found;
}

2 个答案:

答案 0 :(得分:0)

您是否故意在 j 循环中包含 i 或者是偶然的?

参考:

import { call ,put, takeEvery, all } from 'redux-saga/effects'

请记住,一些seg故障存在内存管理问题,而不仅仅是逻辑问题。检查以确保您的sizeof操作符正常运行,这就是我经常搞砸的

答案 1 :(得分:0)

这里有一个错字:

for (int j = 1; i < length; j++)

您写的是i而不是j,这意味着您的循环永远不会停止 在数组外部读取是不确定的,并且由于运气不好而导致崩溃,而不是看起来有效的东西。

由于循环条件,内循环中的两个条件是无意义的(j == lengthi == length)。
第三种只会让你对第一次i迭代没有任何有用的东西 实现这一目标的更好方法是在i + 1开始循环时不做任何事情。

bool match(char word[], int length)
{
    for (int i = 0; i < length; i++)
    {
        for (int j = i + 1; j < length; j++)
        {
            if (word[i] == word[j])
            {
                return true;
            }
        }
    }
    return false;
}