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

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

28
mallocの結果をキャストしますか?
でこの質問、誰かがで提案されているコメント、私がすべきことではないの結果キャストmallocすなわち、 int *sieve = malloc(sizeof(int) * length); のではなく: int *sieve = (int *) malloc(sizeof(int) * length); これはなぜでしょうか?
2408 c  malloc  casting 

13
mallocとcallocの違いは?
行うことの違いは何ですか: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); または: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); mallocよりもcallocを使用したり、その逆を使用したりするのはどのような場合に適していますか?
780 c  malloc  calloc 

17
mallocの後で解放しないと、本当に何が起こりますか?
これは、私を長年悩ませてきたものです。 私たちは皆、学校で教えられています(少なくとも、私はそうでした)、割り当てられているすべてのポインタを解放する必要があるということです。ただし、メモリを解放しない場合の実際のコストについては少し気になります。mallocループまたはスレッド実行の一部の中で呼び出された場合など、いくつかの明らかなケースでは、メモリリークがないように解放することが非常に重要です。ただし、次の2つの例を検討してください。 まず、次のようなコードがある場合: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } ここで実際の結果は何ですか?私の考えでは、プロセスが終了してヒープ領域がなくなるため、呼び出しを逃しても害はありませんfree(ただし、閉鎖、保守性、および適切な運用のためにそれをとることの重要性は認識しています)。私はこの考えで正しいですか? 次に、少しシェルのように動作するプログラムがあるとします。ユーザーはのような変数を宣言できaaa = 123、それらは後で使用できるようにいくつかの動的データ構造に格納されます。明らかに、いくつかの* alloc関数(ハッシュマップ、リンクリストなど)を呼び出すソリューションを使用することは明らかです。この種のプログラムではmalloc、これらの変数はプログラムの実行中に常に存在している必要があり、静的に割り当てられたスペースでこれを実装するための良い方法(私が見ることができない)がないため、呼び出し後に解放しても意味がありません。割り当てられているがプロセス終了の一部としてのみ解放されている大量のメモリがあるのは悪い設計ですか?もしそうなら、代替は何ですか?
538 c  malloc  free 

19
どのような場合にmallocやnewを使用しますか?
私はC ++でデータを割り当てたり解放したりする方法が複数あることを理解しています。呼び出すmallocときは呼び出す必要がfreeあり、new演算子を使用するときはペアにする必要がdeleteあり、2つを組み合わせるのは誤りです(たとえば、free()作成されたものの呼び出し)newオペレータ)が、私は私が使用する必要があるときにクリアしていないよmalloc/ free私が使用する必要があるときにnew/ delete私の本当の世界のプログラムで。 C ++のエキスパートの場合は、この点に関して従う経験則や慣例を教えてください。

25
alloca()の使用が優れたプラクティスと見なされないのはなぜですか?
alloca()の場合のように、ヒープではなくスタックにメモリを割り当てますmalloc()。したがって、ルーチンから戻ると、メモリが解放されます。したがって、これは実際に、動的に割り当てられたメモリを解放するという私の問題を解決します。割り当てられたメモリの解放はmalloc()大きな頭痛の種であり、何らかの理由で失敗した場合は、あらゆる種類のメモリの問題につながります。 alloca()上記の機能にもかかわらず、使用が推奨されないのはなぜですか?
401 c  stack  malloc  allocation  alloca 

13
malloc()とfree()はどのように機能しますか?
どうやっmallocてfree仕事をしたいのか知りたい。 int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes** cout << p; free(p); // Obvious Crash, but I need how it works and why crash. cout << p; return 0; } 可能であれば、答えがメモリレベルで詳細にある場合、私は本当に感謝します。

3
malloc + memsetがcallocより遅いのはなぜですか?
割り当てられたメモリを初期化することとcallocは異なることが知らmallocれています。を使用するcallocと、メモリはゼロに設定されます。ではmalloc、メモリがクリアされません。 だから、日常の仕事で、私は考えるcallocようmalloc+ memset。ちなみに、おもしろいように、ベンチマーク用に次のコードを書きました。 結果は混乱を招きます。 コード1: #include<stdio.h> #include<stdlib.h> #define BLOCK_SIZE 1024*1024*256 int main() { int i=0; char *buf[10]; while(i<10) { buf[i] = (char*)calloc(1,BLOCK_SIZE); i++; } } コード1の出力: time ./a.out **real 0m0.287s** user 0m0.095s sys 0m0.192s コード2: #include<stdio.h> #include<stdlib.h> #include<string.h> #define BLOCK_SIZE 1024*1024*256 int main() { int i=0; char *buf[10]; while(i<10) { …
256 c  malloc 


1
「Cプログラミング言語」の本でmallocをキャストする必要があると書かれているのはなぜですか?
今日、私は、ページに達する167の言語(第二版ブライアンW.カーニハン&デニスM. Ritchie氏を)プログラミングCをし、著者は、私はキャストしなければならないと言うことがわかりましたmalloc。これは本の一部です: 7.8.5ストレージ管理 関数mallocおよびcallocは、メモリのブロックを動的に取得します。 void *malloc(size_t n) 初期化されていないストレージのnバイトへのポインタを返します。要求が満たされない場合はNULLを返します。 void *calloc(size_t n, size_t size) 指定されたサイズのn個のオブジェクトの配列に十分な空き領域へのポインタを返します。要求が満たされない場合はNULLを返します。ストレージはゼロに初期化されます。mallocまたはcallocによって返されたポインターは、問題のオブジェクトに対して適切な配置になっていますが、次のように適切な型にキャストする必要があります int *ip; ip = (int *) calloc(n, sizeof(int)); 私はすでにそれを知っているmalloc(とその家族)戻り型void *型を、そしてなぜキャストへの良好な説明がありますmalloc。 しかし、私の質問は次のとおりです。なぜこの本は私がそれをキャストするべきだと言っているのですか?

23
解放後に変数をNULLに設定
私の会社では、メモリを解放した後、変数をにリセットするというコーディングルールがありますNULL。例えば ​​... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } 上記のコードのような場合、に設定しNULLても意味がないと思います。それとも何か不足していますか? そのような場合に意味がない場合は、このコーディングルールを削除するために「品質チーム」に取り上げます。アドバイスをお願いします。

5
組み込み関数「malloc」の互換性のない暗黙の宣言
私はこのエラーを受け取ります: 警告:組み込み関数「malloc」の互換性のない暗黙の宣言 私はこれをやろうとしています: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 参考までに、手元で使用されている構造体は次のとおりです。 typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; 私がやったことには何の問題もありません。tempList1 xのサイズのを作成していますfileinfo_list。
155 c  struct  malloc 



3
二次元配列を割り当てる奇抜な方法?
プロジェクトでは、誰かがこの行をプッシュしました: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); これはおそらく(n + 1)*(n + 1)doubleの2次元配列を作成します。 おそらく、これまでのところ、これが何をするのか、正確には、どこから来たのか、なぜ機能するのかを教えてくれなかったので、私は尋ねました。 多分私は明白な何かを見逃しているかもしれませんが、誰かが私に上記の行を説明していただければ幸いです。個人的には、私たちが実際に理解しているものを使ったほうがずっと気持ちがいいからです。

8
mallocとnew —異なるパディング
高性能コンピューティング(10 ^ 5-10 ^ 6コア)にMPIを使用するプロジェクトのために、他の誰かのC ++コードをレビューしています。コードは、異なるアーキテクチャ上の(潜在的に)異なるマシン間の通信を可能にすることを目的としています。彼は次のようにコメントを書いています。 通常はnewandを使用しますdeleteが、ここではmallocand を使用していfreeます。これが必要なのは、一部のコンパイラは、new使用時にデータに異なるパディングを行うため、異なるプラットフォーム間でのデータ転送でエラーが発生するためです。これはで発生しませんmalloc。 これは、私が標準new対malloc質問から知っている何にも適合しません。 new / deleteとmalloc / freeの違いは何ですか?コンパイラがオブジェクトのサイズを異なる方法で計算する可能性があるという考えをほのめかします(しかし、なぜそれが使用と異なるのsizeofですか?) mallocと配置new vs. newはかなり人気のある質問ですがnew、mallocそうでない場合のコンストラクタの使用についてのみ話しますが、これは関係ありません。 mallocはどのようにアラインメントを理解しますか?メモリはどちらかと適切に整列することが保証されているか、newまたはmalloc私が以前考えていたものであると述べています。 私の推測では、彼は過去に自分のバグを誤って診断し、それを推定しnewてmalloc、異なる量のパディングを提供していると思いますが、これはおそらく正しくないと思います。しかし、Googleや以前の質問で答えを見つけることができません。 StackOverflow、私を助けてください、あなたは私の唯一の希望です!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.