変数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
takatwu

変数について

#1

投稿記事 by takatwu » 13年前

C++を使用しています。
変数の扱いについて少し自信がないところがあるので2つ質問させて頂きます。

変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?

関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?

box
記事: 2002
登録日時: 14年前

Re: 変数について

#2

投稿記事 by box » 13年前

takatwu さんが書きました: 変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?
そういうコードを書いたら、そうなります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
tk-xleader
記事: 158
登録日時: 14年前
連絡を取る:

Re: 変数について

#3

投稿記事 by tk-xleader » 13年前

takatwu さんが書きました:関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?
その通りです。つまり、関数内部の自動変数のアドレスを関数から返してはいけません。

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: 変数について

#4

投稿記事 by たかぎ » 13年前

takatwu さんが書きました:関数内で変数を宣言しそのポインタを返す時
関数から出た瞬間にその変数は開放されてしまいますか?
記憶域期間の指定はないわけですが...

コード:

int *func(void)
{
    static int value;
    return &value;
}
上のように書けば、func内で宣言された変数valueは関数の外部に対して「開放」されます。
ただし、記憶域が「解放」されるのはプログラム終了時です。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: 変数について

#5

投稿記事 by beatle » 13年前

takatwu さんが書きました:変数をポインタで宣言した時new等でメモリを確保しない場合
そのアドレスはどこかからアクセスされる可能性があるのでしょうか?
この記述には曖昧な点があるように思います。
  • ポインタで宣言:ポインタ変数として定義するということでしょうか。int* p;のように。
  • そのアドレス:定義した変数自体のアドレス、またはその変数に格納されている値のどちらでしょうか。(&pか、pか)

takatwu

Re: 変数について

#6

投稿記事 by takatwu » 13年前

ポインタ変数として定義した場合すでに記憶領域が確保されていると思っていたのですが勘違いだったようですね。

また、関数内で宣言した自動変数のポインタを返すことはダメなようなのでnewで確保した記憶領域のポインタを返すようにします。

閉鎖

“C言語何でも質問掲示板” へ戻る