問題タブ [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 - 複数のメモリ管理機能を備えた単一のC(共有)ライブラリを持つことは可能ですか?
タイトルはあまり明確ではないかもしれないので、私がやろうとしていることを説明するのがおそらく最善でしょう。
いくつかのアプリケーションで使用されている(C)共有ライブラリがあります。PostgreSQLの共有ライブラリの関数を使用したいので、PostgreSQL(v8.4)の拡張ライブラリを作成しています。
コードの重複を防ぐために(DRY哲学に従って)、拡張ライブラリを、上記で説明したコア共有ライブラリの周りの単純なシンAPIにします。そこに問題があります。
私のコアライブラリでは、メモリ管理機能(主にcallocとrealloc)に対して多くの呼び出しを行います。一方、PostgreSQLには、palloc、pfreeなどの独自のメモリ管理機能があります。
理想的には、PG拡張ライブラリがコアライブラリを呼び出すようにします。PG呼び出しを実行しているときは、コアライブラリでpostgresql mem関数を使用し、他のアプリケーションで関数を呼び出しているときは、コアライブラリで標準のCmem関数を使用します。
これが可能かどうかはわかりません(コアライブラリの既存のコード全体を複製する必要がなくなります)。コアライブラリのヘッダーファイルに次のようにいくつかの定義を追加すると思います。
次に、コアライブラリを再コンパイルします。しかし、後で振り返ってみると、これは実行時ではなくコンパイル時に問題を解決することに気付きました(私が間違っていない限り)-したがって、この問題に取り組む方法についてのアイデアが不足しています。
これはできますか?もしそうなら、どのように?
data-structures - cの動的構造体配列内の動的配列
2D構造体配列内の3D配列へのポインターを初期化する方法を理解しようとして立ち往生しています。次のような構造を宣言できたときは、正常に機能していました。
しかし残念ながら、構造が大きすぎてグローバルとして宣言できません。したがって、メモリをcallocする必要があります(システムで使用可能な192GBのメモリ:win 7 64ビット)。
「avg」変数をメモリのチャンクに割り当てようとしていますが、完全に失敗します。
c - 構造体を使用した不完全な型へのsizeofの無効な適用
プレイヤーに関するすべての情報を入れる構造体があります。それが私の構造です:
そしてそれが私のメインです:
ユーザーにプレーヤーの数を教えてもらい、必要なメモリを割り当てようとしています。しかし、私は理解できないこのコンパイラエラーが発生しています:
c - callocが割り当てるメモリ量を事前に計算するにはどうすればよいですか?
私は基本的にこのコードを持っています。
私が計算した方法では、callocは215.265045メガバイトのRAMを割り当てる必要がありましたが、最終的にプログラムはその数を超え、700MB近くのRAMを割り当てました。
そのため、その関数が割り当てるメモリの量を正しく知ることができないようです。
そのプロパティをどのように計算しますか?
c - struct callocまたはポインターの動的配列が失敗しました、C
Cでスパース行列の割り当てを完了しようとしています。値と座標のリストとしてスパース行列を保持し、それをエール形式に変換しています。
私は、これまで誰も見たことがないような奇妙なメモリ割り当ての問題に遭遇しました。私のコードは次のとおりです。
そして、ここにエールの構造体があります:
ただし、プログラムは、ループの最初の反復で最初の関連するprintfでsegfaultを実行します。
私は肯定的です:matrix_elementsは整数です(私のテストケースでは9)matrix_rowsは整数ですA / IA / JAはすべて正しい値で満たされています(printfでyale-> AをAに交換すると正常に動作します)。配列を構造体ポインターに直接呼び出しても、結果には影響しません。型キャストではなく、マロッキング、キャロシング、すべて効果がありません。
Xcodeとgdbのおかげで、セグメンテーション違反の時点でもそれを確認できます。構造体ポインタが配列を指していないようです
c - 2D 配列への書き込みによるセグメンテーション違反
プログラムに小さなメモリ アクセスの問題があり、エラーが見つかりません。誰かが助けてくれるかもしれません。
RGB カラー値を格納する新しい型を作成しました。そのタイプは次のようになります。
私のメイン プログラムでは、calloc を使用して 2D 動的配列を作成し、赤色の情報を格納します。
その後、色の値を読み取り、それらを配列に保存する関数を呼び出します。この関数は、配列をパラメーターとして取得します。
その関数では、値を書き込もうとします
ここでメモリアクセスエラーが発生します。何が間違っていましたか?
編集
こんにちは、まず言語が抜けていて申し訳ありません。昨日は少し疲れていました :)。
理解するために、ピクセルの配列を作成しましたが、要素は別のピクセルの配列を指していますか? みたいな[Point to another 1D array pixel]
?
ピクセルを使用して、タイプピクセルから多数のポインター**pixelvalue = calloc(imginformation.width, sizeof(pixel *));
を作成し、各ポインターをピクセルに表示しますよね?imginformation.width
もし間違っていたら、もう少し詳しく説明していただけると助かります。私は本当にそれを理解したいです。
@ carl-norum とはどういう意味ですか:
「calloc() の戻り値をキャストするべきではありません。そうすることで、#include を使用してバグを隠すことができます。バグが戻ってきて、後で噛み付く可能性があります」.
? 戻り値としてではなく、関数のパラメーターとして割り当て領域を使用します。
ご協力いただきありがとうございます!
グリーツ
c - mallocとcalloc
この質問は、mallocとcallocの違いの重複としてマークされている可能性があることは知っていますが、それでも質問したいと思います。
callocがメモリブロックを初期化することは知っていますが、ここでの私の質問はその部分に焦点を当てていません。
私の質問は
mallocの定義は、指定されたサイズのメモリのブロックを割り当てることを示しています。
そしてcallocは、それぞれが同じサイズのメモリの複数のブロックを割り当てると言います。
1ブロックのメモリと複数ブロックのメモリのこの割り当ては、2つの間の本当の違いですか?
callocで実行できるmallocを使用して同じことができると思うからです。
例えば :
と
intに必要なメモリの100倍を割り当てることになります。
c - cでストレージとバイナリfwriteショートを割り当てます
ショートパンツの単一のブロックを割り当て、それをファイルにfwriteしてから、読み戻そうとしています。しかし、ファイルに書き込まれるデータは、出力されるデータと一致しません。問題を次のコードに切り分けました。私が間違っていることについて何か考えはありますか?
c - callocが初期化に失敗したかどうかを知るにはどうすればよいですか?
calloc(malloc + init)がゼロバイトの配列の初期化に失敗することがあることを読みました(ただし、mallocされた配列へのポインターを返します)。しかし、ドキュメントでは、NULLを返すことを指定していません。配列がゼロに初期化されたことを確認する方法はありますか(配列を超えるよりも良い)、そうでない場合、mallocに対するcallocの利点は何ですか?
c - C で文字列にメモリを動的に割り当てるとき、文字列 char の \0 の終わりを数えますか?
C で文字列にメモリを動的に割り当てるとき、文字列 char の \0 の終わりを数えますか?