Почему условия вне памяти могут привести к доступу к нарушениям и переполнениям стека?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему условия вне памяти могут привести к доступу к нарушениям и переполнениям стека?

Сообщение Anonymous »

В следующем коде используется губернатор процесса для ограничения его памяти - 1 МБ. Затем он распределяет несколько мегабайт памяти в вектор строк, поэтому я ожидаю, что std :: bad_alloc будет брошен (в strings.push_back (sixtyx); ), а затем поймал и повторно обтор и, наконец, пойман. режим; Если я удалю блок внешнего Try/Catch , также для склада переполнений. При запуске в терминале коды возврата (

Код: Выделить всё

%ERROR_LEVEL%
) include -1073741819 (access violation) and -1073741571 (stack overflow), respectively.
An example stack trace:
Изображение
< /p>
#include
#include

#include
#include
#include
#include
#include
#include

int main(int, char **) {
::system(std::format("cmd /c start /min procgov.exe --maxmem 1M -p {}", ::GetCurrentProcessId()).c_str());
::Sleep(1000);

try {
std::vector strings;
for ([[maybe_unused]] const auto i : std::ranges::views::iota(0, 1'000'000)) {
constexpr auto sixtyX = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
try {
strings.push_back(sixtyX);
} catch (...) {
throw;
}
}
} catch (...) {
}

std::println("This is not (always) printed");
}
< /code>
Почему нарушения доступа и переполнения стека происходят? И почему, если так, только спорадически?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -overflows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»