問題タブ [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 - memmove 使用時のバス エラー
重複の可能性:
バス エラーのトラブルシューティング
文字列から重複を削除するには、これが私が書いたプログラムです:
しかし、プログラムの実行時に表示されるエラーは次のとおりです: Bus error: 10
コードにどのような変更を加える必要がありますか? 前もって感謝します
c - ベース4からベース2へのコンバーター
このプログラムは、基数4の数値を基数2の数値に変換するためのものであり、その場で実行する必要があります。
121(基数4の数値)の入力の出力は011001である必要がありますが、01のみが表示されます。12101のような大きな数値の場合、最初と最後の1つの数字をとって0100が表示されます。何が問題なのですか?
c - Linux の memmove() がこのように実装されているのはなぜですか?
memmove(3)の Linux マンページから
memmove() 関数は、メモリ領域 src からメモリ領域 dest に n バイトをコピーします。メモリ領域はオーバーラップする場合があります。コピーは、src 内のバイトが最初に src または dest とオーバーラップしない一時配列にコピーされ、次にバイトが一時配列から dest にコピーされるかのように行われます。
一時的な配列を割り当てて値を 2 回コピーする代わりに、次のようにすることができます。
この実装では、コピーを開始する位置を処理するだけです。
私の実装に欠点はありますか?
注: 実際には実装を使用しません。私はただ興味があります。
c - バスエラーの原因となるメモ
このコードの memmove 呼び出しにより、プログラムがバス エラーでクラッシュします。基本的に、コードは IP パケットを取り込み、新しいパケットを作成します。入力パケットからのいくつかの不変フィールド (TTL、チェックサムを除くすべて) で MD5_HMAC を計算し、値を出力パケットに押し込みます。
これを解決する方法がわかりません。助けていただければ幸いです。ありがとう
構造体は次のとおりです。
c - memcpy中のセグメンテーション違反
文字列の一部の順序を逆にする関数を作ろうとしています。ポインタを使用するのは初めてで、何らかの理由で文字列の文字の場所にアクセスして部分文字列をコピーできますが、同じ場所に戻すことはできません...
反転した部分文字列を元の場所にコピーしようとすると、次のようになります。
プログラム受信信号SIGSEGV、セグメンテーション違反。0x00007ffff7b5dc66 in ?? ()/lib/x86_64-linux-gnu/libc.so.6から
どんな助けでも素晴らしいでしょう!
これが私がこれまでに持っているものです:
c++ - より良い配列シフトアルゴリズム?
すべてを読み取ってからソートするのではなく、ヒープベースの C スタイルの名前の配列を読み取り中にソートする必要がある割り当てがあります。これには、配列の内容を 1 つずつシフトして、新しい名前を挿入できるようにする必要があります。以下のコードを使用していますが、非常に遅いです。ストレージのタイプを変更せずに最適化するために他にできることはありますか?
EDIT2: Cartroo が提案したように、malloc を使用する動的データで memmove を使用しようとしています。現在、これはデータを正しくシフトしますが、割り当て解除プロセスで再び失敗します。何か不足していますか?
c++ - memmove 後の delete[] 中の例外
文字列の動的配列を含む以下のコードがあります。生成された個々の文字列の割り当てを解除する際に問題があります。それらを解放する新しいforループを含めることができると思いましたが、うまくいきませんでした。これをどのように行う必要がありますか?
c - この不可解な動作とメモリ ブロックのオーバーラップに対する memcpy() の出力を調べてください。
について次の記事を読んだ後、次の記事memcpy()
に進みましたmemmove()
。
To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes, and should not overlap (for overlapping memory blocks, memmove is a safer approach).
(リンク)
そして、動作を説明するために使用されたプログラムを確認した後、出力がどのように異なるかを代わりにmemmove()
使用して微調整することにしました.驚いたことに、メモリブロックが重複している場合でも同じです.プログラムと出力、そしてその後の私の混乱を説明し始めました:memcpy()
出力 memmove can be very very useful.
この出力は、の場合と同じです。memmove()
そして、ここに私の混乱があります:
1)両方の出力が同じmemcpy()
である理由str+15
? str+20 位置の文字まで、これは str+15 位置の文字に変更され、str+25 位置にコピーされます。しかし、そうではなく、上書きはなく、中間バッファーのように機能します。元の文字列を正確に記述するために使用されます。str+20
str+16
str+21
次に、 memmove が非常に非常に v になるのではなく、 memmove が非常に非常に役立つ可能性があるため、 memcpy() がそれをコピーするのはなぜですか?
2)現在、そこから生じるマイナーな二次的な質問です。memmove()
( LINK )について次のように述べられています。
Copying takes place as if an intermediate buffer were used, allowing the destination and source to overlap.
ここにあるのは一体何as if
? 中間バッファーは本当に何に使われるのmemmove()
でしょうか?