[解決済み] ffmpeg の av_freep はどのように機能するのですか?
2022-02-04 07:20:32
質問内容
C言語のvoid pointerについて質問があります。ffmpegの一部で以下のようなコードがあり、理解できませんでした。どなたか、どのように動作するのか説明していただけませんか?
void av_freep(void *arg)
{
void *val;
memcpy(&val, arg, sizeof(val));
memcpy(arg, &(void *){ NULL }, sizeof(val));
av_free(val);
}
というように、後で呼び出されます。
char *str;
av_freep(&str);
私の質問です。
- str (&str) のアドレスを渡すと、コンパイル時に "incompatible type" という警告が出ないのはなぜですか?strの型はchar**にならないのでしょうか?
- memcpyのパラメータにある &(void *){ NULL } はどういう意味ですか?
- なぜ、割り当てられていないquot;val;を解放しようとするのですか?
ありがとうございます。
解決方法は?
<ブロッククオートstr (&str) のアドレスを渡すと、コンパイル時に "incompatible type" の警告が出ないのはなぜですか?また、&strの型はchar**にならないのでしょうか?
そうです、そして
char**
は暗黙のうちに
void *
(すべてのポインタ型は暗黙のうちに
void *
).
memcpyのパラメータの一つである &(void *){ NULL } はどういう意味ですか?
それは
複合リテラル
(とはいえ
void *
は複合型ではない)。コンパイラは定数
void *
保持
NULL
で、次に
(&(void *){ NULL })
はそれへのポインタです。本質的には同等です。
static void* const temp = NULL;
memcpy(arg, &temp, sizeof(val));
関連
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] ffmpegを使って開始時刻と終了時刻を基準に動画をカットする
-
[解決済み] FFmpegを使って2つのMP4ファイルを連結する方法は?
-
[解決済み] FFmpegで動画を回転させる
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】シンプルなC言語のscanfが機能しない?重複