Конкатенация строк C ++ иногда завершается неудачей - PullRequest
0 голосов
/ 01 декабря 2018

Я кровавый новичок в C ++.Я пытаюсь читать серийно пронумерованные файлы.Для этого мне нужно создать строки для имен файлов с возрастающим индексом файла.

Мой код работает для индексов до 70. Когда индекс равен 71, внезапно возникает исключение.

Вот мой код:

for (int i = 0; i < 110; i++)
{
    std::string index = std::to_string(i);
    std::string filenameA = "fileA"+ index + ".png"; // Here the Exception is thrown
    std::string filenameB = "fileB"+ index + ".png";
    std::string filenameC = "fileC"+ index + ".png";

    ...
}

Когда i=71 я получаю нарушение прав чтения.Исключение выдается в файле xutility при этом методе:

inline void _Container_base12::_Orphan_all() noexcept
    {   // orphan all iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
    if (_Myproxy != nullptr)
        {   // proxy allocated, drain it
        _Lockit _Lock(_LOCK_DEBUG);

        for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
            *_Pnext != nullptr; *_Pnext = (*_Pnext)->_Mynextiter)
            (*_Pnext)->_Myproxy = nullptr;
        _Myproxy->_Myfirstiter = nullptr; // Here the exception is thrown
        }
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
    }

Странно, код работает без проблем, если отсутствует . в ".png".Кроме того, если я изменяю порядок файлов, например, как это

std::string filenameB = "fileB"+ index + ".png";
std::string filenameC = "fileC"+ index + ".png";
std::string filenameA = "fileA"+ index + ".png";

, ошибка все еще происходит в std::string filenameA = "fileA"+ index + ".png";

Я действительно не понимаю, почему конкатенация строк завершается неудачнодля этого особого случая.

1 Ответ

0 голосов
/ 01 декабря 2018

Спасибо за все ваши комментарии!Вы вдохновили меня посмотреть на все еще раз, поэтому я нашел свою ошибку.Это была простая попытка установить 65-е место в массиве, который имел только 64 места.

Раньше этот код должен был читать набор из 64 файлов, теперь я расширил его до 109 файлов.Я просто забыл обновить размер моего массива, в котором сохраняется информация для каждого файла.

Я до сих пор не понимаю, почему возникла исключительная ситуация в 71-м индексе, а не в 65-м индексе и почему это произошлопри конкатенации строк, а не при операциях с массивами, но, по крайней мере, теперь кажется, что код работает.

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