Почему gflags Windows не терпит крах с этим кодом? - PullRequest
0 голосов
/ 21 августа 2011

Я сделал следующую программу:

int main() {
    int* p = new int[10];
    delete[] p;
    p[0] = 0;
    return 0;
}

Затем я выполнил эту программу с включенным gflags:

C:\tmp\Test2\Debug>"C:\Program Files\Debugging Tools for Windows\gflags.exe" -p /enable Test2.exe /full
path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    test2.exe: page heap enabled

C:\tmp\Test2\Debug>test2

C:\tmp\Test2\Debug>

Как и ожидалось, программа вылетает.Запустив его с отладчиком, я вижу, что он вылетает в этой строке:

p[0] = 0;

Это то, что я ожидал.

Однако эта программа не вылетает:

int main() {
    int* p = new int[10];
    p[10] = 0;
    return 0;
}

Почему gflags не ловит этот заграничный доступ?Какого рода ошибки кучи обнаруживаются gflags и какие ошибки не обнаруживаются?

1 Ответ

3 голосов
/ 05 декабря 2011

Но эта программа не падает:

int main() {
    int* p = new int[10];
    p[10] = 0;
    return 0; 
}

Почему gflags не улавливает это?

Поскольку операция new часто выделяет память больше, чем вы хотитеЦель выравнивания памяти.Если вы хотите это потерпеть, просто используйте p[1025] = 0; или что-то большее.

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