問題タブ [memmove]
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 - 文字列を符号なしバッファにコピーする:セグメンテーション違反
2つの整数と1つの文字列をバッファにコピーして、バッファ要素を出力しようとしています。3番目のprintfステートメントでセグメンテーション違反が発生しました。
なぜこれがセグメンテーション違反になるのかわかりませんか?
c - memmoveは実際にメモリのチャンクを「移動」し、ソースにゼロを残しますか?
重複の可能性:
memcpyとmemmove
memmoveは実際にメモリのチャンクを「移動」しますか?もしそうなら、それはゼロでメモリを残しますか?それとも、memcpyのようなものですか?私はmanページを見ていますが、私の仮定が正しいとは思いません。memmoveを使用してメモリのチャンクを移動したい場合、移動を行ったメモリのチャンクを手動でゼロにする必要がありますか?
c - Valgrindは2つのバッファについて「memcpyでソースと宛先が重複しています」と言っていますが、重複していないようです
OPの最後の最後の編集
プロジェクトで使用されている関数を Valgrind でテストしたところ、「memcpy でソースと宛先が重複しています」と表示され、「無効な読み取り」エラーと「無効な書き込み」エラーも表示されます。これらの 2 つのバッファーがオーバーラップしないようにコードを修正しましたが、結果はありません。コードは次のとおりです。
この関数は、次のように呼び出されています。
ここで、seq_numbered バッファーとバッファーは次のように定義および初期化されます。
また、memcpy を memmove に置き換えようとしましたが、結果はありません:( 私の Valgrind 出力は
場合によっては、他の情報を求めてください、ありがとう
編集 最後の memcpy dim_payload が htonl() でネットワーク形式に変換され、512 から 131072 に変換される前に.. ntohl() を使用して 512 を返す必要があります。
c# - Writeablebitmap - 左に 1 px スクロールします。最善の方法は何ですか? (別名 memmove はどこですか?)
書き込み可能なビットマップがあります。
コンテンツを 1 ピクセル左にスクロールし、一番右の列に新しいピクセル行を入力します。
C++ では、バッファ全体を 1 ピクセル左に memmove し、各行の最後のピクセルを上書きしますが、memmove がないため、C# でこれを行う最善の方法がわかりません。
c - Cで部分文字列を別の文字列に置き換える
すべてのMACROSをその値に置き換えるコードを書いています。マクロMAXの値が1000の場合、コードでは1000に置き換える必要があります(MACROSが行の最初の単語である場合、その行ではMACROSは置き換えられない場合を想定しています。その場合は別の方法で処理されます。
私は初めて使用memmove
しているので、上記のコードが安定していて正しく動作するかどうかは疑問です。memcopy
上記のコードは正しいですか?そして、上記のコードはすべての入力の場合で安定していますか?
c - memmove の「const void*」はどういう意味ですか?
memmove/memcpy/strcpy のプロトタイプの 2 番目の引数は似ています: たとえば:
しかしどうやら、dest と src が重なる場合、src の内容が変更され、const void/char *? に違反します。
c - メモリ処理時のエラー - mremap_chunk: アサーション
以前の投稿のようですが、ここの問題は異なります..
これは問題の C 構造です -
値は、実行時に次のように構造体の内容に提供されます。
これで、認証キーの値を使用する関数ができました。
関数の関連部分は -
次のプログラムを実行しようとすると、このエラーが発生しますが、これについてはわかりません。
関数部分にエラーがあるのではないかと思いますが、マークされた行(上記)をコメントするakeylen
とnullになるため、そのfakekey
値を取得するとプログラムが正常に実行されるため、正確にはわかりません。
編集1:
コードを 3 か所で編集しました (上記のコードでも編集しました)。
プログラムは動作するようになりましたが、一貫性のない出力が発生します。
入力:
出力:
状況はより明確になりました。
それが意味する問題は確かにrealloc
ステートメントにあります。
これについて提案してください。
最初は両方のステートメントに長さを追加しましrealloc
たが、今priv->keylen
では最初の場所と 2 番目の場所に変更しpriv->keylen+priv->akeylen
ました。
しかし、まだ何かを改善する必要があります
なぜこれが上書きされているのですか???
c - C - memmove() 関数 - この実装で移動するバイト数は?
これは素晴らしい場所のようです。私の質問は、この memmove() の実装でどの値 (または何バイト) を移動しているのかということです。
次の例では、11 バイトを移動しています。しかし、なぜ 11 バイトなのですか? 誰か説明してくれませんか?
ありがとう!
編集: ところで、文字列の長さは、終端のヌル文字を含めて 33 です。
c - If destination and source are the same, what does memmove do?
If destination and source are the same, does memmove
still "move" the data (or does it return directly)? What about realloc
; what if the new size is the same as the old size?
c - Cでの使用方法と使用方法はいつですか?
memmove()の使用について2つの疑問があります:
- 別の関数(つまり、作成された独自の関数)を使用する代わりに、この関数を使用することが望ましいのはいつですか?正しく理解できているかわかりません。
- 関数のシグネチャはvoid*memmove(void * dest、const void * src、size_t n)です。単純な配列arr[N]がある場合、それを呼び出された関数に入れるにはどうすればよいですか?arr [N]または&arr [N]?違いは、配列が初期サイズで宣言されているか、ポインターのように宣言されているかです。両方が使用されている多くの例を見たので、私はこの疑問を持っています。
私は自分の疑問を良い方法で説明したことを願っています。
編集:配列から要素を削除する必要があります。次に、削除した要素の次の要素を左側にシフトします。