Как избежать ошибок при доступе к удаленному блоку памяти?

Обновить

December 2018

Просмотры

104 раз

1

Если заголовок не ясно, у меня есть такой пример:

    int *a = new int[5];
    int*b = a;
    delete[] a;
    a = NULL;

Теперь aесть NULL , но bэто не так . Если я получить доступ b, он будет возвращать неправильные значения и может произойти сбой программы.

Как это предотвратить?

1 ответы

4

now a is NULL

Not exactly. a points to some "invalid" (delete-d) memory. If you want it to be NULL, annul it manually.


delete a;

must be

delete[] a;

How to prevent this happen?

No way, if you really need to use (raw) pointers - just be careful with the lifetime of a. It's similar with references - you should just be careful with that, too.

To avoid similar situations, smart pointers are useful. Or just use stack variables instead (where applicable, of course).

Связанные вопросы