Почему доступ за пределы не вызывает ошибок в моем коде? - PullRequest
0 голосов
/ 11 июля 2020

Это моя функция, я запускал с -std=c++17 -Wall -Wextra с clang и gcc на godbolt;

оба компилятора не выдавали ошибок;

функция возвращает 0, при пустой игле; возвращает -1, если игла не найдена, и index первого вхождения при совпадении.

int strStr(string haystack, string needle) {

        if ( needle.empty( ) ) return 0;

        std::size_t n_len = needle.size();

        if( needle.size() > haystack.size() ) return -1;

        int index = 0;

        for ( auto it = haystack.begin(); it != haystack.end(); ++it )
        { 

            std::cout << std::string( it, it + n_len ) << std::endl; 
            if ( std::string( it, it + n_len ) == needle ) return index; // hear also
            //if ( !*(it + n_len ) ) break;
            index++;
        }

        return -1;

    }

Я знаю, что могу получить результаты, используя find или substr;

Я тестировал с помощью ниже, он должен выдавать ошибку, когда я получаю доступ за пределы, но без ошибок;

int main()
{
    
    std::cout << strStr( "aabaaaababaababaa", "bbbb") << std::endl; // prints -1
    std::cout << strStr( "hello", "ll") << std::endl; // prints 2
    std::cout << strStr( "mississippi", "issip") << std::endl; // prints 4
    std::cout << strStr( "ab", "a") << std::endl; // prints 0
}

Спасибо за ваше время и помощь;

1 Ответ

3 голосов
/ 11 июля 2020

он должен выдавать ошибку, когда я получаю доступ за пределы

Нет.

Поведение доступа к массиву за пределами не определено. Нет никакой гарантии, что вы получите ошибку.

, но я тестировал ту же платформу leetcode, она вызвала ошибку времени выполнения

Нет также никакой гарантии, что вы не получить ошибку. Никаких гарантий нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...