問題タブ [void-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 他のリンクリストと無料を含むリンクリスト
データへのvoid*を含むノード構造体とheadへの参照を保持するリスト構造体を使用したジェネリックリンクリストの実装があります。これが私の問題です。リンクリスト内のノードが、そのvoid*を介して別のリンクリストへの参照を保持している可能性があります。これにより、小さいリストを含む大きいリストを解放すると、メモリリークが発生します。したがって、void *が別のリストを指しているかどうかを確認する方法があるので、それをフォローして解放するか、データだけを解放する方法があるのでしょうか。
構造体の先頭にキーを追加すると、void *を逆参照して、それがリストであることがわかるマジックナンバーを確認できますか?
編集:呼び出し元は、私の関数によって挿入された小さなリストを挿入しません。呼び出し元が、ポインターを保持しているリストだけを複数のリストに再配置することを処理したくありません。
c - Cでのconstからnon-constへの代入
以下では:
私は得る:
警告:割り当てにより、ポインタターゲットタイプから修飾子が破棄されます
私は私が使うことができることを知っています
それを回避するために、しかし私は尋ねなければなりません:他に何かありますか?
を使用const void * const
することにより、入力に変更が加えられないと言うふりをします。また、考えてみると、const void *
それで十分でしょう?(呼び出し元に影響を与えるようにポインターを変更できないため)
読んでいただきありがとうございます。
c++ - 参照による void* の受け渡し
void*
参照渡しできないのはなぜですか? コンパイラを使用すると、次のシグネチャを使用して関数を宣言できます。
しかし、それを呼び出そうとすると、次のエラーが発生します。
キャストしてもうまくいきvoid*
ません
また、回避策はありますか?
c - このvoidポインタはどうなっているのでしょうか。
これは、MakeControllerファームウェアのCコードです。voidポインターとは何かはよく知っていますが、この関数の最初の行のような構文は見たことがありません。それによって正確に何が達成されているのでしょうか?
c - カーネルデバイスドライバー"逆参照'void*'ポインター
Linux用のデバイスドライバーの書き方を学んでいますが、一般的なデータ構造の使用について質問があります。
私には完全に機能している課題があります...だから私はあなたに宿題をするように頼んでいません...
この割り当てでは、デバイスがFIFOバッファから要素をエンキューおよびデキューできる必要があります。任意の要素サイズを使用できるように(実行時に指定できるように)、バッファーを「汎用」にしました。ソースは以下に含まれています(これはカーネルバージョンではありませんが、エラーは同じです)...カーネルバージョンにはkmalloc、copy_to / from_user()などが必要です...
これをカーネルモジュールにコンパイルすると、次の警告が表示されます。
kringbuf_generic.c:53: warning: dereferencing ‘void *’ pointer
kringbuf_generic.c:72: warning: dereferencing ‘void *’ pointer
ここでエラーが発生します(memcpy内)
そしてここgetringでは、memcpy()関数で
明らかに、これはカーネルモジュールであるため、誰がこれを使用するかは実際にはわかりません。バッファ要素のサイズを固定すると、このバッファの使用が制限されます。
警告を取り除く方法はありますか?それとも、そのようなコードを開発するときに私が別の方法で行うべき基本的なことはありますか?
c++ - 間接参照時にvoidポインターをポインターにキャストするにはどうすればよいですか?
intポインタを指すvoidポインタがあります。間接参照したいときにvoidポインターを適切にキャストするための構文は何ですか?上記のコードは次のように終了します。
ありがとうございました!
c - Cのソケットを介してメモリアドレスを送受信する方法は?
Cのソケットを介してメモリアドレスを送受信したい.私が持っているものは次のとおりです:
を使用してポインターアドレスを出力する方法はprintf
、を使用することです。%p
ただし、これはたとえば 0x0021ef1a を出力します。私が欲しいのは次のとおりです: 0021ef1a
受信側では、受信したバイトを変換して に戻す方法はvoid*
?
ああ: コードは 32 ビットでも 64 ビット システムでも動作するはずです ;) さらに、コードは -Wall -Werror を使用してコンパイルする必要があります。
助けてくれてありがとう!良い週末を、ジョナス
c++ - C++ での void ポインターを使用した算術演算
void ポインターが指すバッファー内のオブジェクトにアクセスする必要があります。オブジェクトは特定のオフセットにありますが、void ポインターでの演算は禁止されているため、どうすればオブジェクトにアクセスできますか?
c++ - c /c++でのvoidポインタの使用
ねえ、私はソフトウェアをより安全でより柔軟にするという観点から、現実の世界でどのようにvoidポインタが適用されるのか疑問に思っています。たとえば、voidポインター、つまりそれがキャストするポインターは外部に隠されていることを知っています。これにより、ソフトウェアがより安全になります。voidポインタを使用する他の理由はありますか?
c - 構造体で使用する間接参照のレベルは?
int
タイプの識別子とあらゆる種類の値を保持する単純な構造を作成したいと考えています。使うべきか
また
または、他の何か?