ページ 1 / 1
変数について
Posted: 2012年5月10日(木) 00:17
by takatwu
C++を使用しています。
変数の扱いについて少し自信がないところがあるので2つ質問させて頂きます。
変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?
関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?
Re: 変数について
Posted: 2012年5月10日(木) 00:37
by box
takatwu さんが書きました:
変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?
そういうコードを書いたら、そうなります。
Re: 変数について
Posted: 2012年5月10日(木) 00:53
by tk-xleader
takatwu さんが書きました:関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?
その通りです。つまり、関数内部の自動変数のアドレスを関数から返してはいけません。
Re: 変数について
Posted: 2012年5月10日(木) 02:11
by たかぎ
takatwu さんが書きました:関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?
記憶域期間の指定はないわけですが...
コード:
int *func(void)
{
static int value;
return &value;
}
上のように書けば、func内で宣言された変数valueは関数の外部に対して「開放」されます。
ただし、記憶域が「解放」されるのはプログラム終了時です。
Re: 変数について
Posted: 2012年5月10日(木) 07:31
by beatle
takatwu さんが書きました:変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?
この記述には曖昧な点があるように思います。
- ポインタで宣言:ポインタ変数として定義するということでしょうか。int* p;のように。
- そのアドレス:定義した変数自体のアドレス、またはその変数に格納されている値のどちらでしょうか。(&pか、pか)
Re: 変数について
Posted: 2012年5月10日(木) 19:49
by takatwu
ポインタ変数として定義した場合すでに記憶領域が確保されていると思っていたのですが勘違いだったようですね。
また、関数内で宣言した自動変数のポインタを返すことはダメなようなのでnewで確保した記憶領域のポインタを返すようにします。