Я также отметил проблему, повторяющуюся при передаче отрицательных значений в длину вектора.Возможное объяснение состоит в том, что вектор пытается выделить длину, которая ему была дана немедленно.
Поскольку отрицательное значение вводится в uint, отрицательное значение автоматически переводится в очень большое положительное значение.это приводит к тому, что вектор пытается выделить слишком много памяти (около 4 ГБ) и, следовательно, немедленно происходит сбой.
, если вы передаете отрицательное значение длине массива, ничего не происходит, потому что, очевидно, он не пытается выделитьдлина.но вы можете проверить значение и увидеть, что это очень большое положительное число.
Это объяснение чисто гипотеза, я его нигде не слышал.но это соответствует как семантике, так и значению восклицательного знака.
Тем не менее, я искал всю нашу кодовую базу для использования установщика "length" и не смог найти его используемым с вектором.Тем не менее, мы очень часто сталкиваемся с подобными сбоями - некоторые из них вызваны фактическим высоким потреблением памяти (возможно, утечками), но в других случаях это просто происходит, когда память относительно мала.
Я не могу этого объяснитьвозможно, есть другие операции, которые потенциально могут привести к выделению большого объема памяти, кроме «длины» установщика?