問題タブ [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.
gcc - calloc でのクラッシュ
私が書いたプログラムをデバッグしようとしています。私はそれを内側に走らせ、なんとか内側からgdb
をキャッチしました。これがどのように発生するかについて、私は完全に混乱しています。それはバグの可能性がありますか??SIGABRT
calloc()
gcc
libc
詳細: 私のプログラムは OpenMP を使用しています。valgrind
エラーなしでシングルスレッドモードで実行しました。mmap()
私は 40GB のファイルをロードするためにも使用しますが、それが関連しているとは思えません。内部gdb
では、30 スレッドで実行しています。問題のあるものをキャッチするまで、いくつかの同一の実行(同じ入力とCL)が正しく終了しました。表面的には、これはある種の競合状態が存在する可能性があることを示唆しています。しかし、それは私のSIGABRT
手に負えないところから来てcalloc()
います。関連するgdb
出力を次に示します。
関数my_calloc()
は単なるラッパーですが、実際のcalloc()
呼び出しは正当に見えるため、問題はそこにはありません。シェルで設定されている制限は次のとおりです。
プログラムはメモリ不足ではなく、256GB が利用可能なマシンで 41GB を使用しています。
g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)
flagsを使用してコンパイルしまし-g -O2 -DNDEBUG -mmmx -msse -msse2 -fopenmp -Wall -Wno-deprecated -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
た。
編集:私が得る詳細なエラーメッセージは以下の通りです。切り捨てました。表示されていない行は、最後の 5 行に似ています。
Edit2 :「自明ではない」場所 (10/30) で停止しているすべてのスレッドのスレッド情報を追加しました。
arrays - Linux がヒープ メモリをクリアするのにかかる時間
私は疑問に思っていました...次のような配列を動的に割り当てたとします
または似たようなもの。また、n が非常に大きな数 (引数のために ~ 100 万) の場合、最後にそうしなかった場合、Linux がヒープ メモリをクリアするのにどれくらいの時間がかかりますfree()
か? 私は、OS が動き回って、解放されていない未使用のヒープメモリ領域をクリアすることを知っています。ただし、それを行うのにかかる時間はOSに依存すると思います。
c - 動的に割り当てられたメモリの読み取りと書き込み
次の部分を含むコードがあります。
そして、私はコードのこの部分の出力を持っています:
だから、ここに質問があります-'objects'変数がゼロ以外の場合、なぜ'objects + k'はゼロですか?私が作るとき:
私は次のような行を取得します:
何故ですか?私はすでにそのことを考えて脳を壊しました。
c - calloc は失敗し、NULL を返します
アプリケーションのモジュールの 1 つで、calloc() が失敗し、NULL が返されます。割り当てようとしているメモリの量は、9292 バイトの構造です。オペレーティング・システムは AIX 7.1 で、VIOS 2.2.1.3 を実行しています。
マシンには 2 GB 以上の RAM が搭載されており、メモリ不足の問題はないようです。問題のあるボックスと同じ構成を持つ他のボックスの 1 つで、同じアプリケーション モジュールが正常に動作しています。以下は、両方のボックスからのメモリの抜粋であり、同じです。
作業ボックス:
問題のあるボックス:
このボックスで 9292 バイトでも calloc() が失敗する理由が本当にわからないので、私にはわかりません。
ありがとう
c - 型を 2 次元配列として返す
次のコードでは、コンパイル時に関数 fun2() の型が競合しているためにエラーが発生します。
ただし、このコードはそうではありません -
ただし、両方のプログラムが同じタスクを実行しています。コンパイルエラーの背後にある理由は何ですか?
c - free()の失敗
このようにループでメモリを割り当てている場合
しばらくして、コードの後半で、次のようにメモリを解放しています。
free()
メモリを解放せず、その結果、より多くのメモリが割り当てられる可能性はありますか?file
ループごとに1回メモリを割り当てて解放しています。また、nptperf[file]
通常は約1〜300万ポイント、そしてngridx = ngridy = 100
。
このプログラムはngridx = ngridy = 80
以下で動作しますが、で失敗し100
ます。
c - malloc と calloc を型キャストする必要がありますか
重複の可能性:
malloc の結果をキャストしますか?
mallocとcallocの型キャストの理由を見つけるためにグーグルで調べていました。しかし、mallocの型キャストはvoid ポインターを返すため不要であることがわかりましたが、 callocはどうですか。これはcallocも同じ理由です???
さて、最初のポイントに戻ると、 mallocとcallocの戻り値について。次に、両方が割り当てられたスペースを返していることがわかりました。だから、私はここで少し混乱しています。だから、私の質問は
mallocとcallocの戻り値は何ですか
mallocとcallocを型キャストする必要がありますか。なぜ ?
c - 複数の入力にmalloc()を使用していますか?
了解しました。malloc
またはcalloc
動的割り当てに使用できることは知っていますが、CIの初心者として、TC++の例のように複数の入力を入力するために割り当てたメモリの使用方法がわかりません。このコードがあります。
このように、コードでは、Helloを割り当てたメモリに配置します。これにより、さらに4つの文字スペースが残り、これらのスペースにもデータを追加する必要があります。
ユーザーが入力の数について尋ねられ、10または100と言うと、プログラムがデータを入力して保存し、そのデータを画面に出力するときに、このアイデアを実装したいと思います。
c - mallocおよびその他の関連機能
'ArrayA'という名前の配列があり、intでいっぱいですが、条件が満たされるたびに、配列の最後にさらに5つのセルを追加したいと思います。どうすればいいですか?(インターネットはあまり役に立ちません)
objective-c - ARC が有効な場合のリーク
C 配列を使用するとコードがリークするようですが、その理由がわかりません。
私はこれで呼び出しますLeakyClass
:
計器は、配列 1 に追加するために渡された各値を指していLeakyClass
ます。この例ではobject
、@"example"
と[NSURL URLWithString:exampleString]
. Instruments も と の s を指していますcalloc
が、 で両方を解放します。_array1
_array2
dealloc
何か不足していますか?