次のCコードがあるとします。
void myfunction() {
time_t t = 0;
struct tm *ct;
time(&t);
ct = localtime(&t);
}
ご覧のとおり、この関数は変数localtime
への新しいポインターを返します。struct tm
私の知る限り、関数から返された変数が呼び出し元のコンテキストで有効であるためには、次の少なくとも1つを満たす必要があります。
- 返される変数は、呼び出し元のコンテキストまたは呼び出し元に関連する上位のコンテキストで宣言する必要があります。
- 返される変数には、ヒープに割り当てられたメモリが必要です。
私の場合、最初のポイントは当てはまらないので、2番目のポイントは満たされていると考えるのが普通です。
私は正しいですか?
ct
はいの場合、それは私がそれを使用した後に変数でfreeを呼び出す必要があることを意味しますか?
そうでない場合は、少し詳しく説明していただけますか?
ありがとう!
編集:
回答から、変数が返されるコンテキストで使用可能であるという要件には、別のポイントがあるはずだと理解しました。それは静的変数でなければなりません。別の可能性はありますか?