問題タブ [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とmemcpyの使用に関する問題
だから私はメモリ管理システムを作成しようとしています。これを行うために、(mallocによって割り当てられた)一定量のスペースがあり、次に、割り当てられたスペースへのポインターを本質的に返す関数myMallocがあります。次にそれを解放しようとするので、memsetを使用して、割り当てられたスペースのヘッダーを割り当てられたスペースのサイズに設定しようとしています。
次に、これを読み取って、サイズを確認できるようにする必要があります。memcpyを使用し、最初のsizeof(int)バイトを変数に入れることで、これを実行しようとしています。テストの目的で、memsetを実行し、すぐにサイズを元に戻そうとしています。すべての宣言を確認できるように、以下にメソッド全体を含めました。どんな助けでも大歓迎です!ありがとう!
::編集:: ごめんなさい!これを実行すると、memcpy行を実行しようとすると、セグメンテーション違反が発生し続けます。私たちは過去1時間ほどさまざまなアイデアで遊んでいますが、正直なところ、エラーがどこで発生しているのかわかりません。
:: Edit2 :: これもコメントとして投稿しましたが、ここにも載せると思ったので見つけやすかったです...
私たちの問題は、128MBの1回のmalloc呼び出しで指定された、作業が許可されているスペースが割り当てられていることです。これしか使用できないため、mallocを使用してサイズを初期化することはできません。サイズを初期化せずにこれを行う方法はあると思います。そうでない場合は、memcpyを使用せずにヘッダーが設定されているintを取得する方法はありますか。
c++ - C++の構造体でのmemsetの使用
私は自分の仕事のために古いコードを修正することに取り組んでいます。現在、C++で記述されています。彼らは静的割り当てを動的に変換しましたが、memsets / memcmp/memcpyを編集しませんでした。これは私の最初のプログラミングインターンシップであり、私の初心者のような質問にはほとんど触れていません。
次のコードはCですが、C ++で使用したいと思います(mallocはC ++では適切ではないことを読みました)。2つのシナリオがあります。最初に、fを作成しました。次に、ゼロで埋めるために&fを使用します。2番目はポインタ*pfです。C ++の前の例のように、pfをすべて0に設定する方法がわかりません。
pf = new foo
mallocの代わりに実行してから、電話をかけてもらえますmemset(pf, 0, sizeof(foo))
か?
c++ - C++ の構造体配列の memset
memset に関する別の質問があります。編集しているコードに問題があるように見えます (または、別のファイルで同じように行われていません)。
rad_array
2 番目の例は、 が配列の最初の位置と同じであるため、正しいように見えます。それならsizeof(SecArray))
理にかなっています。最初のものは私には正しくないようです。すべての構造体は単なる BOOL であり、INTS は動的なものではありません。
memset に関する私の他の投稿からの私の理解は、それがこの形式に従っているということでした。
memset("pointer to object", "what to set it to", "size of object")
私の理論が間違っているとしたら、ここで何が起こっているのか正確に教えてもらえますか?
c - C の奇妙な配列の動作
どちらもstrncmp
見た目とはstrlcpy
異なり、私のオペレーティング システム (Linux) では利用できないことを知った後、自分で書いてみようと思いました。
libc のメンテナーである Ulrich Drepper からの引用を見つけましstrlcpy
たmempcpy
。どちらも持っていませんがmempcpy
、その動作は簡単に再現できました。まず、これは私が持っているテストケースです
そして、これがその結果です:
内部表現 (作成された行)には、最初のコピー後の検査でのフォーマット文字列や、2 番目のコピーでの外部の 0x01 など、insp()
ノイズが混入していることがわかります。printf()
文字列はそのままコピーされ、長すぎるソース文字列を正しく処理します (copy_string
ここでは、長さとして 0 を渡すことで発生する可能性のある問題を無視しましょう。後で修正します)。
しかし、宛先内に (フォーマット文字列からの) 外部配列の内容があるのはなぜですか? あたかも宛先が新しい長さに一致するように実際にサイズ変更されたかのようです。
iphone - memcpy/memset の使用
Obj-C プログラム内で memset または memcpy を使用する場合、コンパイラはデータの設定 (memset) またはコピー (memcpy) を 32 ビット書き込みに最適化しますか、それともバイト単位で行いますか?
c++ - ランタイム ライブラリなしで VC++ 組み込み関数を使用する方法
私は、可能な限り最小のバイナリを生成しようとする課題の 1 つに関与しているため、C または C++ ランタイム ライブラリ (RTL)を使用せずにプログラムをビルドしています。DLL バージョンまたは静的バージョンにはリンクしません。#include
ヘッダーファイルさえありません。私はこれでうまくいきました。
などの一部の RTL 関数はmemset()
便利なので、独自の実装を追加してみました。デバッグ ビルドでは正常に動作します (コンパイラが への暗黙的な呼び出しを生成する場所でもmemset()
)。しかし、リリース ビルドでは、組み込み関数を定義できないというエラーが表示されます。リリース ビルドでは、組み込み関数が有効になっておりmemset()
、組み込み関数です。
組み込みの for をリリース ビルドで使用したいと考えてmemset()
います。これはおそらくインライン化されており、私の実装よりも小さくて高速だからです。しかし、私はキャッチ22のようです。を定義しないmemset()
と、リンカーはそれが未定義であると不平を言います。定義すると、コンパイラは、組み込み関数を定義できないと文句を言います。
#pragma
RTL オーバーヘッドを引き込まずに組み込み関数を取得するための定義、宣言、およびコンパイラとリンカー フラグの正しい組み合わせを知っている人はいますか?
Visual Studio 2008、x86、Windows XP+。
問題をもう少し具体的にするには:
そして、私は次のように構築します:
の実装でコンパイルすると、コンパイルmemset()
エラーが発生します。
の実装なしでこれをコンパイルするとmemset()
、リンカ エラーが発生します。
c - memset(ary、0、length)は、double配列にゼロを入力するポータブルな方法です。
次のコードは、memsetを使用してすべてのビットをゼロに設定します
これはすべてのプラットフォームで機能すると思いますか?
doubleデータ型は常にieee-754標準に対応していますか?
返信ありがとうございます。::filltemplateコマンドもありがとうございます。しかし、私の質問は、より二重のデータ型という意味でした。
たぶん私は純粋なcのために私の質問を書くべきでした。とにかくありがとう。
編集:コードとタグをcに変更
c++ - 配列全体の値を設定する最も簡単な方法は何ですか?
私の現在のプロジェクトでは、他のいくつかの値に基づいて配列を埋める必要があります。私は近道があることを知っています:
しかし、この場合、宣言後に配列を埋める必要があります。現在、コードは次のようにフォーマットされています。
ただし、コンパイルされません。私の場合、前述のショートカットを利用する方法はありますか?そうでない場合、利用可能な最良の修正は何ですか?各要素を明示的に割り当てずに設定する方法を教えてください。すなわち:arr [0] [0]=..。
c - 作成されたC配列のObjective-C初期値
クラシックC(NSArrayまたはその子の1つではない)に似た配列を作成します-のようなものBOOL i[5];
です。そして、そのすべての値をNOに等しくしたいと思います。
まず、そのような配列の初期値に関する情報は見つかりませんでした(クラシックCでは未定義になることはわかっていますが、Objective-Cについては正確にはわかりません。クラスとその内部データに関する情報を見つけました[割り当て後、初期化なし]、ただし単純なデータ型についてではありません)。
そして2つ目は、配列値を手動で設定する必要がある場合、memset(...);
または何か別のものを使用する必要がありますか?
考えられる質問を防ぐために...この構造を一時的なブールフラグの配列として使用したいのですが、ここでNSArrayのようなものを使用することが証明されているとは思いません。
c - memsetにもかかわらず「初期化されていない値の使用」
2 次元配列を割り当て、memset を使用してゼロで埋めます。
その後、valgrind [1] を使用してメモリ エラーをチェックします。次のエラーが表示Conditional jump or move depends on uninitialised value(s)
されます: 行 24 ( printf("%i ", array_2d[i][j]);
)。memset は配列を初期化する関数だといつも思っていました。このエラーを取り除くにはどうすればよいですか?
ありがとう!
Valgrind 出力:
[1]valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes --db-attach=yes ./a.out
[gcc-cmd]gcc -std=c99 -lm -Wall -g3 playing_with_valgrind.c