問題タブ [calloc]
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 - malloc または calloc を使用しない free() 関数
簡単な質問
malloc を事前に呼び出さずに free() 関数を使用できますか??
エイ。
コンパイルエラーは発生しませんが、これは機能しますか、それともまったく正しいですか?
ありがとうございました、
c - Cでのmalloc()とcalloc()について非常に混乱しています
私は常にJavaでプログラミングしてきましたが、これがおそらく私がこれについてとても混乱している理由です。
Javaでは、ポインタを宣言します。
初期化するか、メモリを割り当てます。
さて、Cでは、それはすべてとても混乱しています。最初は、宣言するのと同じくらい簡単だと思いました。
初期化するか、メモリを割り当てます。
私が間違っていない限り、上記のすべては同等のJava-Cですよね?
それから、今日私は私が以下を見つけたコードに会いました:
以下のいくつかの行は、初期化されていません。
驚くべきことに(少なくとも私にとっては)、コードは機能します!少なくともJavaでは、それは素晴らしい「NullPointerException」を返します!
だから、順番に:
私はすべてのJava-Cの「翻訳」で正しいですか?
そのコードが機能するのはなぜですか?
malloc(n*sizeof(int))
との使用に違いはありcalloc(n,sizeof(int))
ますか?
前もって感謝します
c - callocよりmallocを優先する
重複の可能性:
mallocとcallocのcの違い
callocよりmallocを好む状況はありますか?私は、mallocとcallocの両方がメモリを動的に割り当て、callocも割り当てられたメモリのすべてのビットをゼロに初期化することを知っています。このことから、mallocよりもcallocを使用する方が常に良いと思います。または、mallocの方が優れている状況はありますか?パフォーマンスは?
c - mallocとcallocの使用法の違い
このソースコードは、mallocとcallocをよりよく理解するために作成しました。
わかりましたが、いくつか質問があります。
このcallocと同じです。私は記憶をクリアすることについて心配していません。
これをwhileループで5回実行する場合と比較して、正確には何ですか。
最初のものと2番目のものは5構造体デバイスへのポインターを作成していると思います。そして3つ目は、構造体デバイスへの単一のポインターを作成することですか?
私のプログラムは、valgrind --leak-check=fullを使用してコンパイルおよび実行されたこの3つの異なるメソッドを示しています。
アドバイスをありがとうございます。
memory - 64 ビット Linux での非常に大きなメモリ割り当て
centos 64 ビット Linux で単一の非常に大きなメモリ (>2.5 GB) を割り当てようとしています。ハードウェアには 16 GB 以上の物理メモリがあります。ただし、malloc または calloc を使用すると、null が返されます。コードは root アカウントで実行され、ulimit で確認した限り、メモリ割り当てに制限はありません。何が問題になる可能性がありますか?
ありがとう。
メテ
c - free()に渡されるポインタは、メモリブロックの先頭を指す必要がありますか、それとも内部を指すことができますか?
質問はタイトルにあります...検索しましたが何も見つかりませんでした。
編集:
これを説明する必要はあまりありませんが、私が言っていることは意味がないと人々が考えているため(そして私が間違った質問をしている)、ここに問題があります:
人々は実際に尋ねられた質問ではなく、すべての問題の「根本的な」原因に非常に興味を持っているように見えるので(それは明らかに物事がより良く解決するのに役立つので、それが解決するかどうか見てみましょう)、ここに問題があります:
Win32サブシステム以外のサブシステムにそのライブラリを使用できるように、NTDLL.dllに基づいてDランタイムライブラリを作成しようとしています。そのため、NTDLL.dllとのみリンクする必要があります。
はい、私は機能が「文書化されていない」ことを知っており、いつでも変更される可能性があります(20年後wcstombs
も同じことを行う100ドルを賭けても、それがまだ存在する場合)。はい、私は人々(特にマイクロソフト)がそのライブラリにリンクしている開発者を好まないことを知っています、そして私はおそらくここで正しいことについて批判されるでしょう。そして、はい、上記の2つのポイントは、Win32サブシステムの前に実行されるchkdskやdefragmentersのようなプログラムは、kernel32.dllやmsvcrt.dllのようなものとリンクすることが文字通り不可能であるため、そもそも作成されることさえ想定されていないことを意味します。まだNTネイティブの実行可能ファイルがあるので、開発者は、これらのステージが永遠に私たちの手の届かないところにあることを意図しているふりをする必要があります。
しかし、いいえ、ここにいる誰かが私に数千行のコードを貼り付けて、それらを調べて、失敗していないメモリ割り当てが変更しているソースコードによって拒否されている理由を理解するのを手伝ってくれるとは思えません。そのため、コミュニティではベストプラクティスとして知られていると思われますが、「根本的な」原因とは異なる問題について質問しました。
それでも意味がわからない場合は、以下にコメントを投稿してください。:)
編集2:
約8時間のデバッグの後、私はついに問題を発見しました。
与えられたポインタがであるかのように自動的に機能RtlReAllocateHeap()
しないことがわかりました。RtlAllocateHeap()
NULL
c - calloc(1000, 23) と言った場合、23 は 24 に「切り上げ」ますか? それとも32まで?
私が疑問に思っていたのは、ほとんどの実装でcalloc
はサイズもアライメントとして扱い、サポートされている次の粒度に切り上げるのですか?
もしそうなら、それらは次の 2 の累乗に切り上げますか、それとも次の 8 または 16 の倍数に丸めますか?
パラメータを同じに保つ場合calloc
、それはどのように機能しますか? あなたのデータは整列されていませんか?
ありがとうございました!
c - calloc使用後のCアクセス違反
注:CはMicrosoftCコンパイラです。
次のコードで問題が発生しています。
これは別のCファイルにあります。保守しやすくするために物事を分離することを決定するまで、この問題は発生していませんでした。ポインタと少し混同しているだけだと思います。
callocは正常に機能します。
ループの最初の反復で、roomIndexの要素0が適切に設定されます。
ただし、ループの2番目の要素(要素1)は、実行時に常にアクセス違反になります。
コードの後半でも2D配列を使用してこの問題が発生しましたが、これはまったく同じ問題であり、これが最も単純なケースであると考えています。
ここで最初の要素以外を設定することが不可能であると思われる理由を誰かが理解するのを手伝ってもらえますか?
c - Cでcalloc()を使用するには?
このプログラムで文字列が 9 文字を超えた場合、エラーが発生するはずがありませんか?
ありがとう
ブラグマン
c - メモリのプールを管理するためにCでデータ構造を初期化する
私はライブラリ用の単純な関数を書いています。それは、他の関数によって管理されるメモリのサイズをパラメータとして取り入れます。
私は、ユーザーによって初期化されたこの大きなメモリプールの情報を保持するデータ構造を持っています。
このデータ構造を初期化する方法と、最初に管理するのに十分なスペースを割り当てる方法を理解しようとしているこの関数もありますか?
助けてください