問題タブ [malloc]
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.
cocoa - NSTreeController - malloc double free エラー
私は自分のプログラムで NSOutlineView と組み合わせて NSTreecontroller を使用していますが、私のプログラムは常に吐き出しています: malloc: *** error for object 0x1d70d0: double free
. これらのメッセージは、IB でバインディングを削除すると消えます。なぜこれが起こっているのですか?
注: これは私のプログラムをクラッシュさせる動作ではありませんが、クラッシャーのルートであると思われます。
c - エラーから戻った後にメモリを解放する最良の方法は何ですか?
呼び出し元にメモリを割り当てる関数があるとします。
2 番目の malloc() が失敗した場合に備えて、割り当てられたメモリを free() する最善の方法について、フィードバックをお寄せください。より多くのエラー終了ポイントとより多くのメモリが割り当てられた、より複雑な状況を想像できます。
c - int メンバーを C 構造体に追加するとセグメンテーション違反が発生する
私はまだCを学んでおり、それを使って画像を生成し始めました。私のプログラムの 1 つがセグメンテーション違反を起こしている理由がわかりません。ソースコードは次のとおりです。40行に短縮されています。
コンパイルして正常に実行されますが (Ubuntu では gcc を使用し、Cygwin を使用する Vista では)、img->o を扱う 2 行のコメントを外すと、問題が発生します。この前の質問に関連していると感じていますが、mallocする必要があるものはすべてmallocしています(と思います)。どんな助けでも大歓迎です。
c - C はメモリを自動的に割り当てますか?
私は C を書き始めてほんの数週間しか経っていませんmalloc()
。しかし最近、私のプログラムは、私が期待していた真/偽の値ではなく、幸せそうな顔の文字列を返しました。
次のような構造体を作成すると:
そして後でこのように初期化します
どこかのメモリに保存されている幸せな顔にアクセスすることになるのでしょうか、それとも既存のセルを上書きすることになるのでしょうか? 私の質問は、適切な量のメモリを実際に malloc() していない場合、C はどのようにメモリを割り当てるのでしょうか? デフォルトは何ですか?
c - malloc() はメモリの連続ブロックを割り当てますか?
私は非常に古い学校のプログラマーによって書かれたコードを持っています:-)。それはこのようなものになります
プログラマは基本的にバッファ オーバーフローの概念に取り組んでいます。私はコードが危険に見えることを知っています。私の質問は次のとおりです。
malloc は常にメモリの連続ブロックを割り当てますか? このコードでは、ブロックが連続していない場合、コードは大きな失敗をするためです。
free(request_buffer)
実行すると、malloc ie によって割り当てられたすべてのバイトが解放されますかsizeof(ts_request_def) + (2 * 1024 * 1024)
、それとも構造体のサイズのバイトのみが解放されますかsizeof(ts_request_def)
このアプローチに明らかな問題はありますか。これについて上司と話し合う必要があり、このアプローチの抜け穴を指摘したいと思います。
c - C メモリ割り当てに関する質問
string
そのため、作成したタイプで機能する関数がいくつかあります。それらの 1 つは、動的に割り当てられた文字列を作成します。もう 1 つは、前述の文字列を受け取り、それを拡張します。そして最後のものは文字列を解放します。注: 関数名は変更されていますが、すべて私が独自に定義したものです。
上記のコードは機能します - コンパイルして正常に実行されます。以下のコードは機能しません - コンパイル、実行、そして
コードの違いは、adds()
関数がもう 1 文字 (a ) を追加していること!
です。追加する文字に違いはありません。長さだけです。完全を期すために、次のコードは機能しません。
奇妙なことに、別の関数addc()
(文字列の代わりに 1 文字を追加する) を使用する次のコードは機能します。
同じことを行う以下も機能します。
動作しないすべてのエラーは次のとおりです。
(test
私がこれを持っているプログラムの非常にわかりやすい名前です。)
関数の内部に関する限り、 mymake()
は への呼び出しと へstrlen()
の 2 つの呼び出しと へmalloc()
の呼び出しmemcpy()
、 myadds()
は への呼び出し、 へstrlen()
の呼び出しrealloc()
、 への呼び出しmemcpy()
、 myfree()
は標準ライブラリへの 2 つの呼び出しfree()
です。
なぜ私がこれを取得しているのか、または分解してデバッガーを使用する必要があるのでしょうか? adds()
sではなく、特定の長さを超える es でのみ取得していaddc()
ます。
関数のコードを分解して投稿する:
c - プログラムの終了前に malloc 後に解放しないと、実際にはどうなりますか?
割り当てられたすべてのポインターを解放する必要があることは、すべて教えられています。ただし、メモリを解放しない場合の実際のコストについては、少し興味があります。がループ内またはスレッド実行の一部で呼び出された場合など、いくつかの明白なケースでmalloc()
は、メモリ リークが発生しないように解放することが非常に重要です。ただし、次の 2 つの例を考えてみましょう。
まず、次のようなコードがあるとします。
ここでの本当の結果は何ですか?私の考えでは、プロセスが停止し、とにかくヒープ領域がなくなるので、への呼び出しを逃しても害はありませんfree
(ただし、閉鎖、保守性、および優れた実践のためにとにかくそれを持つことの重要性を認識しています)。私はこの考えで正しいですか?
次に、シェルのように動作するプログラムがあるとします。ユーザーは次のような変数を宣言できaaa = 123
、それらは後で使用するために動的データ構造に格納されます。明らかに、*alloc 関数 (ハッシュマップ、リンク リストなど) を呼び出すソリューションを使用することは明らかです。この種のプログラムの場合、malloc
これらの変数はプログラムの実行中に常に存在する必要があり、静的に割り当てられたスペースでこれを実装する良い方法 (私が見ることができる) がないため、呼び出し後に解放することは意味がありません。割り当てられているが、プロセス終了の一部としてのみ解放されるメモリの束を持つのは悪い設計ですか? もしそうなら、代替手段は何ですか?
c++ - C ++でメモリのチャンクをcharとして読み取る方法
こんにちは、ビット (ビット リテラル) を含む (malloc() で割り当てられた) メモリのチャンクがあります。それを char の配列として読み取りたい、または 8 の ASCII 値を出力したいです。メモリの連続ビット。
メモリをchar *として割り当てましたが、ループで各ビットを評価し、値をcharに追加してcharの値を左にシフトするよりも良い方法で文字を取り出すことができませんでしたが、より迅速な解決策を探していました。ありがとうございました
私が今書いたのはこれです:
割り当て用:
me への書き込み用:
そして今まで私は文字を取り戻すことができませんでした.私はビットを印刷するだけです:
私がやろうとしていることの例は次のとおりです。
input.txt には文字列「AAAB」が含まれています
私のプログラムは、「AAAB」を「01000001010000010100000101000010」としてメモリに書き込む必要があります(ビットで65656566であるAAABのビットでのASCII値です)
では、メモリの内容をファイルに書き換える機能があればいいのですが。
したがって、メモリに再び「01000001010000010100000101000010」が含まれている場合、出力ファイル「AAAB」に書き込まれます。
c++ - インテル TBB のスケーラブルなアロケーターはどのように機能しますか?
tbb::scalable_allocator
Intel Threading Building Blocks は内部で実際に何をしますか?
確かに効果はあります。シングルstd::vector<T>
をstd::vector<T,tbb::scalable_allocator<T> >
. 一方、別のアプリでは、すでに大量のメモリ消費量が2倍になり、物事をスワップシティに送信するのを見ました。
Intel 自身のドキュメントには、多くの情報はありません (たとえば、この FAQの最後にある短いセクション)。自分でコードを掘り下げる前に、どのようなトリックを使用しているか教えてもらえますか?
更新: TBB 3.0 を初めて使用したところ、scale_allocator による最高のスピードアップが見られました。シングルvector<int>
を a に変更するとvector<int,scalable_allocator<int> >
、実行時間が 85 秒から 35 秒に短縮されました (Debian Lenny、Core2、TBB 3.0 のテスト)。