問題タブ [memset]
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++ - memset を使用してポインタ要素の 2 次元配列を初期化する
これらの構造定義があります
配列のポインターを NULL に初期化するには、次のようにします。
これは私には正しく見えません。
c++ - memsetを使用してメモリへのポインタをNULLに設定する方法は?
私は構造を持っています
のアドレスを設定したいのですがp_my_t
、NULL
これまでのところ、これを実行しようとした方法は次のとおりです。
しかし、これは私には正しく見えません。これを行う正しい方法は何ですか?
質問の修正 - 根本的により複雑な質問をする:
これが私がやろうとしていることです:
- A と B の 2 つのプロセス
- Aのmalloc p_my_t、BにはN個のスレッドがあり、それにアクセスできます
- A で削除を開始しますが、B のスレッドがまだ使用している可能性があるため、単純に解放することはできません。
- したがって、関数を呼び出し、p_my_t のアドレスを B に渡して、そのアドレスを B で NULL に設定し、B の他のスレッドが使用できなくなるようにします。
- Bからコールバックした後、Aのメモリを解放します
注意: プロセス間の共有メモリを介してメモリ割り当てを管理する標準的な方法はありません。何が起こっているのかについて、かなり慎重に考える必要があります。
c++ - C memset はすべてのメンバーに書き込みを行っていないようです
int 座標と float 座標の両方を処理する小さな座標クラスを作成しました。
次に、 main() で次のことを行います。
しかし、私の MSVC デバッガーによると、x 値のみが 0 に設定され、y 値はそのままです。これまでテンプレート クラスで sizeof() を使用したことがありませんでしたが、それが原因でしょうか?
c++ - unistd.h read() は、書き込み後にさらにデータを読み取っています
名前付きパイプからデータを読み書きしています。書き込み側では、定数の 110 バイトを書き込んでいると表示されます。読み取り側では、ほとんどの場合、正しい 110 バイトを読み取っていると表示されますが、220 バイトまたは 330 バイトを読み取っていると表示される場合もあります。これは、私がそれを出力すると、同じ read() 内で同じメッセージが 2 回または 3 回続けて出力されるという事実にあります。読むための以下のコードでは、文字をクリアするために memset に何か問題がありますか? バッファーに何かが残っていない限り、書き込みよりも読み取りが多い方法は他に考えられません。
c - sockaddr_in、sockaddr_in6、addrinfo などの構造体を使用前にゼロにする場合、memset、初期化子、またはどちらが正しいですか?
書籍、マニュアル ページ、Web サイトで実際のコードやソケット コードの例を見ると、ほとんどの場合、次のようなものが表示されます。
それ以外の:
また:
また:
たとえば、getaddrinfo に渡す前に struct addrinfo ヒントをゼロに設定する場合も同じことがわかります。
どうしてこれなの?私が理解している限りでは、memset を使用しない例は、memset を使用する例と同等である可能性があります。違いがあることを認識しています:
- memset はすべてのビットを 0 に設定しますが、これは必ずしも各メンバーを 0 に設定するための正しいビット表現ではありません。
- memset は、パディング ビットもゼロに設定します。
これらの構造体をゼロに設定する場合、これらの違いのいずれかが関連するか、必要な動作であり、したがって代わりに初期化子を使用するのは間違っていますか? もしそうなら、それはなぜですか?また、どの標準または他の情報源がこれを検証していますか?
両方が正しい場合、初期化子の代わりに memset/bzero が表示される傾向があるのはなぜですか? スタイルだけの問題ですか?どちらがより良いスタイルであるかについて、主観的な答えは必要ないと思います。
通常、memset よりも初期化子を優先して使用するのが一般的です。これは、すべてのビットをゼロにすることは通常望ましくなく、その代わりに型のゼロを正しく表現する必要があるためです。これらのソケット関連の構造体については逆ですか?
私の調査では、POSIX では、http: //www.opengroup.org/onlinepubs/000095399/basedefs/netinet/in.h.html で sockaddr_in6 (sockaddr_in ではなく) をゼロにする必要があるだけであることがわかりましたが、その方法については言及していません。ゼロにする必要があります(memsetまたは初期化子?)。BSD ソケットは POSIX よりも前のものであり、それが唯一の標準ではないことを認識しています。レガシー システムまたは最新の非 POSIX システムに対する互換性の考慮事項はありますか?
個人的には、スタイル (およびおそらく良い慣行) の観点から、初期化子を使用して memset を完全に回避することを好みますが、次の理由で気が進まないのです。
- UNIX Network Programmingのような他のソースコードと半正規のテキストは bzero を使用します (例えば、第 2 版の 101 ページと第 3 版の 124 ページ (私は両方を所有しています))。
- 上記の理由により、それらが同一ではないことは十分承知しています。
c - memsetでfloat配列を初期化する
これは私が書き込もうとしているコードです:
私の問題は、memsetを使用して、配列のすべてのエントリを0以外の数値にすることができるかどうかを確認したいということです。ただし、その行をステップ実行すると、配列の内容が非常に小さい数値(0)に変わります。この場合、memset()関数を使用して何が間違っているのだろうか。私がこれを入力しているときに提案された関連する質問のどれもそうではないように見えるので、これが重複した投稿ではないことを願っています。
c - char 配列と char ポインター
recvを使用してソケット経由でデータを受信すると、次のように気づきました。
私は受け取ります
mesgx��
「mesg」は私が送信したもので、ランダムな文字が追加されています。
私が使用する場合
代わりに、私は受け取ります
メッセージ
したがって、文字列にランダムなものが追加されることはありません。代わりに char[5] を使用しても同様に機能することがわかりましたが、その理由はよくわかりません。malloc(4) は本当に 5 バイトを割り当て、5 番目は NUL ですか?
c - memsetが配列を埋めていません
非常に簡単に言えば、なぜ私の出力は次のようになりますか?
ps:u32はunsignedintの単純なtypedefです
編集:
- gcc4.3.4でコンパイルする
- string.hが含まれています
.net - Windows Magnification API、.NET、およびマトリックス
Windows Magnification API を使用して、.net で拡大鏡アプリを作成しようとしています。実際に倍率レベルを設定することを除いて、ほとんどすべてが機能しています(デフォルトは100%です)。問題は、ネット上のどこにも例が見つからず、API のすべてのドキュメントが C++ コードであることです。これは私が問題を抱えている特定の機能です。
MAGTRANSFORM 構造体は次のように定義されます。
これの最も紛らわしい部分は memset です - それが何をするのか、.NET でそれに相当するものがあるのか わかりませんが、多次元配列/行列と、.NET でもこれをどのように処理するかについても混乱しています。
どんな助けでも大歓迎です。