タグ付けされた質問 「malloc」

malloc関数は、Cで動的メモリ割り当てを実行し、標準ライブラリの一部です。mallocの使用法、動作、実装に関する質問には、このタグを使用してください。

2
C ++ 20までのint未定義の動作にmallocを使用しています
次のコードはC ++ 20まで未定義の動作をしていると言われました。 int *p = (int*)malloc(sizeof(int)); *p = 10; 本当? 引数は、intオブジェクトに値を割り当てる前にオブジェクトの存続期間が開始されないというものでした(P0593R6)。問題を解決するには、配置newを使用する必要があります。 int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; オブジェクトの存続期間を開始するために、簡単なデフォルトのコンストラクターを呼び出す必要が本当にありますか? 同時に、コードは純粋なCで未定義の動作をしません。しかし、intCコードでを割り当て、それをC ++コードで使用するとどうなりますか? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } // C++ source code: extern "C" int *alloc_int(void); …

8
C mallocアサーションが失敗するのはなぜですか?
OpenCL実装に対してベンチマークできるように、分割統治多項式アルゴリズムを実装していますがmalloc、作業に取り掛かることができません。私がプログラムを実行すると、それはたくさんのものを割り当て、いくつかのものをチェックし、そしてsize/2アルゴリズムに送信します。それから私がmalloc再びラインを打つとき、それはこれを吐き出します: malloc.c:3096: sYSMALLOc: Assertion `(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 …
86 c  gcc  malloc  assertion 

12
Cの `free`が解放されるバイト数を受け取らないのはなぜですか?
明確にするために:私はそれを知ってmallocおりfree、Cライブラリに実装されています。Cライブラリは通常、OSからメモリのチャンクを割り当て、独自の管理を行ってアプリケーションに少量のメモリを分割し、割り当てられたバイト数を追跡​​します。この質問は、無料がどれだけ解放するかをどのように知るかではありません。 むしろ、freeそもそもなぜこのように作られたのか知りたい。低水準言語であるため、Cプログラマーに、割り当てられたメモリだけでなく、どのくらいの量も追跡するように依頼するのは完全に合理的だと思います(実際、私は通常、バイト数を追跡​​することになります。とにかくmalloced)。また、バイト数を明示的に指定freeすると、パフォーマンスの最適化が可能になる場合があります。たとえば、割り当てサイズが異なる個別のプールを持つアロケータは、入力引数を確認するだけで、解放するプールを決定できます。全体的にスペースのオーバーヘッドが少なくなります。 だから、要するに、なぜし、mallocそしてfreeそれらは内部的に割り当てられたバイト数を追跡するために必要としているように作成?それは単なる歴史的な事故ですか? ちょっとした編集:「割り当てた金額とは異なる金額を解放したらどうなるか」などのポイントを提供している人もいます。私が想像したAPIは、割り当てられたバイト数を正確に解放するために1つを必要とするだけです。多かれ少なかれ解放することは、単にUBまたは実装定義である可能性があります。しかし、他の可能性についての議論を思いとどまらせたくはありません。

13
mallocの「ダブルフリー」エラーの原因を見つける方法は?
Objective-Cでアプリケーションをプログラミングしていますが、次のエラーが発生します。 MyApp(2121,0xb0185000)malloc:***オブジェクト0x1068310のエラー:ダブルフリー ***デバッグするmalloc_error_breakにブレークポイントを設定します NSAutoreleasePoolをリリースしたときに発生していて、2回リリースしているオブジェクトがわかりません。 彼のブレークポイントを設定するにはどうすればよいですか? この「オブジェクト0x1068310」が何であるかを知る方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.