ローカル変数は、少なくとも関数内に存在します。しかし、ブロック外のブロックスコープ変数はどうなるのでしょうか?同じ機能ですが、そのアドレスを保持して使用できますか?このコードは有効ですか?C 'がローカルスタック変数を割り当て解除するとき?
#include <stdio.h>
int main()
{
char *f;
if (1)
{
char q[] = "123";
f = q;
}
printf ("%s\n", f);
return 0;
}
実際に
gcc -ansi -pedantic
もvalgrindのそれに文句を言うでもないが、私はそれクロスプラットフォーム、クロスコンパイラ使用することができますか?私には見えませんが、どのツールでエラーが表示されるのですか?
P.S.結局私はstatic
を使うべきですか?それは適切な解決策かもしれませんが、スレッドセーフなものではないようですね。
ここで、重複は非常に良い答えではありません。問題は、別の関数から戻ってこない関数内の範囲についてです。同様に無効ですが、この質問の例が有効期限切れのスタックフレームへのポインタを単に戻すよりも無効な理由はさらに微妙です。 – Persixty