初心者の質問かもしれませんが、関数がローカル変数へのポインタを受け入れることを防ぐ方法が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; '' int * p = new int(); save(p); save(&b);/* do stuff */save(NULL);} '?変数がローカルであるとは限りません。 ); delete p; ' –