Если название не ясно, у меня есть этот пример:
int *a = new int[5];
int*b = a;
delete[] a;
a = NULL;
Сейчас a
NULL, но b
нет. Если я получу доступ b
, он вернет неправильные значения и может привести к сбою программы.
Как это предотвратить?
теперь NULL
Не совсем. a
указывает на какой-то «недействительный» (delete
-г) память. Если вы хотите, чтобы это было NULL
Отмените это вручную.
delete a;
должно быть
delete[] a;
Как предотвратить это?
Нет, если вам действительно нужно использовать (сырые) указатели — просто будьте осторожны со временем жизни a
, Это похоже на ссылки — вы должны быть осторожны с этим тоже.
Чтобы избежать подобных ситуаций, умные указатели полезны. Или просто используйте переменные стека (где это применимо, конечно).
Других решений пока нет …