Возможно, это вопрос новичков, но есть ли способ в C/C++, чтобы функция не принимала указатель на локальную переменную?Предотвращение локальных указателей
Рассмотрим этот код:
int* fun(void)
{
int a;
return &a;
}
компилятор выдаст предупреждение о том, что указатель не может быть возвращена. Теперь рассмотрим следующее:
int* g;
void save(int* a)
{
g = a;
}
void bad(void)
{
int a;
save(&a);
}
Это будет проходить через компилятор без предупреждения, что плохо. Есть ли какой-то атрибут или что-то такое, чтобы это не происходило? То есть что-то вроде:
void save(int __this_pointer_must_not_be_local__ * a)
{
g = a;
}
Спасибо заранее, если кто-то знает ответ.
отзывов коментариев? ... профилировщики кода, такие как lint? –
Обзор кода, статический анализ. То, о чем вы просите, на самом деле очень и очень сложно. –
Что делать, если я хотел сделать 'void f() {int b; save (&b);/* do stuff */save (NULL);} '? Это не обязательно тот факт, что переменная является« локальной », что имеет значение: это также было бы плохо. int * p = new int(); save (p); delete p; ' –