問題タブ [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.
c - ポインタを解放した後に間接参照すると、異なる結果が得られるのはなぜですか?
C(およびDebian GNU /LinuxではGCC4.3.3)のメモリ管理について質問があります。
K&RによるCプログラミング言語の本(7.8.5章)によると、ポインタを解放してから逆参照すると、エラーになります。しかし、以下に貼り付けたソースのように、コンパイラ(?)が明確に定義された原則に従って動作しているように見えることがあることに気付いたので、疑問があります。
動的に割り当てられた配列を返す方法を示す、このような簡単なプログラムがあります。
いくつかの引数を使用してコンパイルしようとすると、-ansi -Wall -pedantic-errors
エラーや警告は発生しません。だけでなく、また、正常に動作します。
*(p + 4)は8、* xは0です。なぜこれが発生するのですか?*(p + 4)が8の場合、x配列の最初の要素は6なので、* xを6にすべきではありませんか?
呼び出しの順序をfreeに変更しようとすると、別の奇妙なことが起こります。例えば:
実際、この場合、(私のマシンでの)出力は次のようになります。
xポインターが実際に「解放」されているのに、pポインターが「異なって」解放されているのはなぜですか?わかりました。メモリを解放した後、ポインタをNULLを指すようにする必要があることはわかっていますが、興味があったのは:P
c - malloc.c:3074 エラー?
C プログラムを書いているときに、次のような問題に遭遇しました。
malloc.c:3074: sYSMALLOc: アサーション (old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2]))) - __builtin_offsetof (struct malloc_chunk) 、 fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~(((2 * (sizeof) (size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0) 失敗しました。
修正するのを手伝ってください、事前に感謝します!
c - コンパイラが malloc が int を返すと想定するのはなぜですか?
C では、 の戻り値をキャストしないことがベスト プラクティスであることを認識していますmalloc()
。malloc()
を含めない場合、コンパイラはそれが int を返すと想定していることを読みましたstdlib.h
。もちろん、int を int ではないものに暗黙的に代入しようとするとエラーが発生しますが、そのエラーは明示的なキャストによって隠蔽される可能性があります。したがって、明示的にキャストする危険性がありmalloc()
ます。
私が作成したすべての関数について、関数が存在しない場合、コンパイラはそのことを教えてくれます。malloc()
を含めていなくても、コンパイラがそれが int を返すと想定するのはなぜstdlib.h
ですか? malloc()
含めるまで未定義のままにするべきではありませんstdlib.h
か?
c - C malloc:不可解なメモリ使用量
次のコードをコンパイルして実行すると:(cygwinでgccを使用)
Windows XPのタスクマネージャは、このプロセスによるメモリ使用量を2232Kと表示します。これは、私によれば、約400000Kであるはずです。
次のコードをコンパイルして実行すると:(cygwinでgccを使用)
メモリ使用量は1388Kに減少します。
したがって、増加を示すのではなく、実際には減少を示します。
これを説明できるのは何ですか?
iphone - インストゥルメント (リーク) と NSDateFormatter
Instruments Leaks を使用して iPhone アプリを実行し、NSDateFormatter を使用して多数の NSDates を解析すると、解析後にこれらの NSDates を解放する必要があるにもかかわらず、メモリが約 1 MB 増加し、残ります (新しくない場合は破棄します)。
malloc (以下の最も重いスタック トレース) は NSDate の一部になる可能性があると考えましたが、解析の中間ステップでのみ使用されるメモリである可能性も考えました。誰がそれがどれであるか、または見つける方法を知っていますか?
また、NSDate dealloc にブレークポイントを設定して、そのメモリが実際に回収されているかどうかを確認する方法はありますか?
これらの日付を解析するための私の日付フォーマッタは次のようになります。
メモリが増加してそこにとどまる場合の最も重いスタック トレースを次に示します。
ありがとう!
c++ - malloc() と free() はどのように機能しますか?
malloc
仕組みやfree
働き方を知りたい
可能であれば、答えがメモリレベルで詳細に記載されている場合は、本当に感謝しています。
c - 構造体の初期化の問題?
私は次のような構造体を使用しています:
構造体を初期化したいのですが、malloc()メソッドを使用すると次のような動的メモリが返されます
次に、次のようにフラグポインタを使用します。
次に、多くのフラグメントを返すと問題が発生します。エラーメッセージは次のように述べています(valgrindツールを使用):
誰が私にどう対処できるか教えてくれます。ありがとう!
c - Malloc、文字列ポインター、および Valgrind
私のプログラムは次のようなものです(main.c):
ツール valgrind でデバッグすると、($:valgrind --tool=memcheck --leak-check=full --track-origins=yes ./main):
その理由と修正方法を誰が教えてくれますか。
c++ - メッセージキューから動的な長さのデータを受け取る方法は?
大学のプロジェクトで、SysV メッセージ キューを使用して動的データを送受信する必要があります。
データの長さは別のメッセージで送信されるsize
ため、すでにわかっています。
そして、これが私がデータを受信しようとする方法です。私は C++ の専門家ではないことを認めなければなりません。特にメモリ割り当てに関してはそうです。
問題はmalloc
呼び出しのようですが、これを正しく行う方法がわかりません。
編集
私が試みているのは、メッセージ キューの周りの OO ラッパーに何らかの読み取りメソッドを用意することです。char[]
メッセージ キュー内のデータをまたはに読み込みたいと思いますstd::string
。私が今持っているものは、このように(単純化されて)見えます。
私が得るのは、セグメンテーション違反または完全に破損したデータだけです (ただし、このデータには必要なものが含まれている場合があります)。