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

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

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

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

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

1

Решение

теперь NULL

Не совсем. a указывает на какой-то «недействительный» (delete-г) память. Если вы хотите, чтобы это было NULLОтмените это вручную.


delete a;

должно быть

delete[] a;

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

Нет, если вам действительно нужно использовать (сырые) указатели — просто будьте осторожны со временем жизни a, Это похоже на ссылки — вы должны быть осторожны с этим тоже.

Чтобы избежать подобных ситуаций, умные указатели полезны. Или просто используйте переменные стека (где это применимо, конечно).

4

Другие решения

Других решений пока нет …