問題タブ [memcpy]
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++ - memcpy() がランダムにクラッシュする
アプリケーションで memcpy を使用しています。memcpy はランダムにクラッシュします。以下は Dr.Watson ファイルで取得したログです。
以下はコードです
どこ:
- dep は構造体です
- EntryRec は文字ポインタです
- adp は構造体です
- データは
NULL
この場合ではありません
誰かがこの問題に直面していて、私を助けることができますか?
私はプログラムをデバッグしようとしましたが、次のエラーが発生しました。
データはこのプログラムの引数に渡され、これは void* です
詳細情報:
コード アダプターをデバッグしようとしましたが、次の領域でクラッシュしています。この関数は OUTPUT.c にあります (これはライブラリ関数だと思います)。
変数の値: p= ""(初期化されていない) i= 2147483598
c - C インライン アセンブリ メモリ コピー
インライン アセンブリを C に書き込もうとしています。入力として 2 つの配列があります。必要なのは、array1 の 1 つの要素を array2 にコピーすることです。現時点では次のようになります。
セグメンテーション違反が発生するのはなぜですか?
cuda - 同じグラフィックカードでOpenGLを使用してグラフィックをレンダリングするアプリケーションを使用したCUDAホストからデバイス(またはデバイスからホスト)のmemcpy操作
私は自分の問題をCUDAフォーラムに投稿しましたが、2つのフォーラムの間にかなりの数の異なる聴衆がいる場合に備えて、ここにリンクを投稿してより多くのアイデアを得ることが適切かどうかわかりません。リンクはこちらです。特定のCUDAメモリアクセスと管理の問題の詳細についてはまだ返信がないため、ご不便をおかけして申し訳ありません。この質問に対するコメントに感謝します。前もって感謝します。
c - 画像処理のための非常に高速なmemcpy?
私はCで画像処理を行っており、メモリの周りに大量のデータをコピーする必要があります。ソースと宛先が重複することはありません。
GCCを使用してx86プラットフォームでこれを行うための絶対的な最速の方法は何ですか(SSE、SSE2が利用可能ですがSSE3は利用できません)?
ソリューションはアセンブリであるか、GCC組み込み関数を使用することになると思いますか?
次のリンクを見つけましたが、それが最善の方法であるかどうかはわかりません(作成者は、いくつかのバグがあるとも言っています):http://coding.derkeiler.com/Archive/Assembler/comp.lang.asm。 x86 / 2006-02 / msg00123.html
編集:コピーが必要であることに注意してください、私はデータをコピーする必要を回避することはできません(理由を説明することはできますが、説明は割愛します:))
c - C memcpy() 関数
関数のサイズを計算する方法はありますか? 関数へのポインタがあり、memcpy を使用して関数全体をコピーする必要があります。いくつかのスペースをmallocし、memcpyの3番目のパラメーターであるサイズを知る必要があります。私はそれ sizeof(function)
がうまくいかないことを知っています。何か提案はありますか?
c - C: ディープ コピー - void ポインターを持つ構造体
次の構造体があります
void ポインターを含む構造体のディープ コピーを行うことは可能ですか? data
ポインタが指しているバイト数がわからないと思いますか?したがって、指定されたバイト数をmallocしてmemcpyを実行することはできません。私は正しいですか?
c++ - 新しい十分なメモリが割り当てられていませんか?
さて、私はネットワークから直接パケットを取り出し、そこから TCP ストリームを抽出しています。
簡単に言えば、これはさまざまなヘッダーを取り除くことを意味します (例: eth->IP->TCP->ストリーム データ)。
最終的にすべてのヘッダーを通過したときに呼び出される関数で、奇妙なエラーが発生しています。
TCP ストリームは、パケットのデータのコピーを指す単純なu_int32_t
およびです。u_char*
そのため、memcpy を使用していたときに segfault が発生しました。
明らかに、ポインタが無効であるか、長さを台無しにしていました。
この特定のパケットの場合、データの長さは 1380 バイト (Wireshark で確認) であるため、len は正しく計算されます。
わかりましたので、ポインターを台無しにする必要があります (NULL ではありません)。次の実験を行いました。
したがって、streamData (具体的にはインデックス 1236) に逆参照しすぎると、segfault が発生します。ただし、streamData は次のようにインスタンス化されます。
i=0 で streamData の反復処理を開始するので、大量のデータをスキップすることはありません。streamData はそのままなu_char*
のでoffset(pkt)
、u_char*
型を台無しにすることはありません。
これは、3000 以上の他のパケットを正常に反復した後、特定のパケットで失敗します。ダンプ ファイルは 27 メガバイトで、4 ギガの RAM があるので、不足しているとは思いません。 ?
c++ - 整数の各バイトはCPU/メモリにどのように格納されますか?
私はこれを試しました
出力は次のようになります:
89
0
0
0
これは私の胃のcuzをかなり訓練します私は数が0x00000059のようにメモリに保存されると思ったので、どうしてc [0]は89になるのですか?私はそれがc[3]にあるはずだと思った...
c - cのchar []を構造体にコピーする方法
UDP ソケット経由で構造体を送信しようとしています。
struct パケット { int seqnum; char data[BUFFERSIZE]; };
だから私が持っている送信者に
だから私はそれが私の構造体をChar []にコピーすることを望んでいます。
私が持っている受信機で
ただし、レシーバーではmemcpy((void *) currentpkt, (void *) recv, bytes); を使用します。エラーが発生します:
エラー: ポインター型に変換できません
私は何を間違っていますか?UDP ソケット経由で構造体を送信するより良い方法はありますか?
***** アップデート *****
回答ありがとうございます。最後に「&」を見逃しましたが、コードは次のようになりました。
送信者:
レシーバー:
C では、それを char にキャストしてバイトを送信できるのは素晴らしいことです。
c - memcpy C を使用してバッファー間のコピーを支援する
キャッシュのパフォーマンスをチェックするために、あるバッファの内容を別のバッファにnバイトのブロック ( nは異なる場合があります) で数回コピーする必要があります。
私は memcpy を使用していますが、うまくいきません。ブロックサイズは、数キロバイトから数メガバイトまで可変です。そして、使用する最大ブロック (ロングダブル) を予約する必要があります。
私はコピーで少し迷っています。誰かがこの問題に直面していて、ヒントや疑似コードで私を助けることができるかどうか疑問に思っています.
トピックを編集して、いくつかのコードを含めます。
アイデアは、バッファ 1 からバッファ 2 にデータ ブロック 'p' 回でコピーすることです。