問題タブ [realloc]

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.

0 投票する
6 に答える
17676 参照

java - 事前に作成されたクラスを使用せずにJavaで拡張可能な動的配列を作成する方法は?

ええ、それは宿題の質問なので、givemetehkodezplsthx! :)

とにかく、ここで私がしなければならないことは次のとおりです
。属性の中に別のクラスのオブジェクトの配列を持つクラスが必要です。私の意見では、これを行う適切な方法は、LinkedList、Vector などを使用することです。残念なことに、前回それを行ったとき、教授から火と硫黄をもらいました。彼の信念によれば、基本を理解せずに高度なものを使用していたからです。

次の明らかな解決策は、固定数の要素で配列を作成し、配列がいっぱいかどうかを確認する get および set にチェックを追加することです。いっぱいになると、新しいより大きな配列が作成され、古い配列のデータが新しい配列にコピーされ、新しい配列が呼び出し元に返されます。ほとんど空の場合、新しい小さな配列を作成し、古い配列から新しい配列にデータを移動します。私には、これは少しばかげているように見えます。私の宿題では、配列に 3 つ以上の要素が存在しない可能性がありますが、配列が埋められる頻度、追加された新しい要素の平均数についての統計を手動で計算せずに、スケーラブルなソリューションを作成したいと考えています。計算結果を使用して、新しい配列の要素数などを計算します。

ちなみに、配列の途中から要素を削除する必要はありません。

任意のヒント?

0 投票する
1 に答える
384 参照

c - realloc - int を char に変換する

配列全体を反復処理して整数の配列を char に変換し、結果の文字列を ncurses の method に追加していますnew_itemreallocateなんらかの理由で、私は記憶の仕方で何か間違ったことをしているので、最初の列を次のように取得します。

-

**更新: これは修正されました。上記のコードを参照してください。

0 投票する
1 に答える
21213 参照

c - realloc(): 次のサイズが無効です

realloc 関数に問題があります。私はLibCurlでCのみを使用しています(ベクターはありません)。私が抱えている問題は、write_data関数(コールバックとしてCurlに渡す関数、libcurlが戻すデータ (データはチャンクで渡されます) )。

痕跡:

-削除-

ソース:

前もって感謝します、

0 投票する
3 に答える
4510 参照

c++ - realloc() を複数回呼び出すと、ヒープが破損するようです

このコードの問題点は何ですか? 毎回クラッシュします。

失敗したアサーション「_ASSERTE(_CrtIsValidHeapPointer(pUserData));」である場合もあれば、単なる「ヒープ破損」エラーである場合もあります。

バッファサイズを変更すると、この問題に奇妙な影響があります。「realloc」でクラッシュすることもあれば、「free」でクラッシュすることもあります。

このコードを何度もデバッグしましたが、ポインターに関して異常はありません。

ありがとう!

0 投票する
5 に答える
4714 参照

c++ - C++ アロケータに再割り当て機能がないのはなぜですか?

C では、標準のメモリ処理関数はmalloc()realloc()およびfree()です。ただし、C++ stdlib アロケーターは、それらのうちの 2 つにしか対応していません。再割り当て機能はありません。もちろん、realloc()単純にメモリをコピーすることは非集約型には適していないため、 とまったく同じことはできません。しかし、たとえば、この関数に問題があるでしょうか:

どこ

  • ptrnum_nowオブジェクトに対して同じアロケータで以前に割り当てられています。
  • num_requested>= num_now;

セマンティクスは次のとおりです。

  • アロケーターが特定のメモリ ブロックをオブジェクトptrのサイズからnum_nowオブジェクトに拡張できる場合、アロケータはnum_requestedそれを行い (追加のメモリを初期化せずに残します)、 を返しますtrue
  • それ以外の場合は何もせずに返しますfalse

確かに、これはそれほど単純ではありませんが、私が理解しているように、アロケーターはほとんどがコンテナー用であり、コンテナーのコードは通常、既に複雑になっています。

そのような関数を考えるとstd::vector、たとえば、 は次のように成長する可能性があります (疑似コード):

メモリ サイズを完全に変更できないアロケータは、無条件でそのような関数を実装できますreturn false;

気にする価値がないほど、再割り当て可能なアロケーターの実装はほとんどありませんか? それとも、私が見落としたいくつかの問題がありますか?

0 投票する
3 に答える
1116 参照

c - C の realloc() に問題があります。常にハングしますが、コンパイルは正常に行われます

文字列バッファを意図したプログラムで問題が発生しています。具体的には、この関数は文字列 cstr でバッファをリセットすることを目的としています。cstr が null の場合、コンテンツを空の文字 '\0' にリセットする必要があります。buf->contents のサイズを変更している realloc の 2 番目のセットで常にハングします。その理由はわかりません。どんな助けでも素晴らしいでしょう。

構造体:

から呼び出されます。

問題が発生している strbuf_reset 関数を次に示します。

提案された変更であると私が信じているもので...

0 投票する
6 に答える
1192 参照

c - 効率的なメモリ再割り当てに関する質問

特定のサイズ(MAX_OBJECT_SIZEと呼びましょう)を超えることのない複数のオブジェクトを割り当てるプログラム(C++など)があるとします。

また、ヒープ上にリージョン(「ページ」と呼びます)があります(たとえば、malloc(REGION_SIZE)で割り当てられます。ここで、REGION_SIZE> = MAX_OBJECT_SIZE)。
いっぱいになったスペースが PAGE_SIZE に等しくなるまで (または少なくとも > PAGE_SIZE - MAX_OBJECT_SIZE になるまで)、そのページにスペースを確保し続けます。

ここで、より多くのメモリを割り当てたいと思います。明らかに、以前の「ページ」では十分ではありません。したがって、少なくとも 2 つのオプションがあります。

  1. NEW_SIZE > PAGE_SIZE の realloc(page, NEW_SIZE) を使用します。
  2. 新しい「ページ」(page2) を割り当て、そこに新しいオブジェクトを配置します。

カスタム割り当て関数が必要な場合は、次のようにします。

  1. 最初の方法を使用して、どれだけ満たしたかを確認し、そこに新しいオブジェクトを配置します (オブジェクトのサイズを、満たされたメモリ変数に追加します)。
  2. 2 番目の方法を使用すると、ページのリスト (ベクトル? 配列?) を取得し、現在のページを探して、選択したページで 1 と同様の方法を使用します。

最終的には、メモリを解放する方法も必要になりますが、その部分は理解できます。

私の質問は次のとおりです。このような問題を解決する最も効率的な方法は何ですか? それはオプション 1、オプション 2、またはここで検討していない他のオプションですか? 現実世界の状況で結論を引き出すには、小さなベンチマークが必要ですか、または十分ですか? 操作が異なればパフォーマンスも異なる可能性があることは理解していますが、全体的な指標を探しています。

0 投票する
4 に答える
3512 参照

c - 2D char 配列を再割り当てします

次のコードがあります

次の再割り当てエラーが発生します。

ここで私の問題は何ですか???

よろしくお願いします

0 投票する
5 に答える
4885 参照

c - reallocとfreeは、「doublefreeまたはcorruption」を引き起こします

我慢して。私は8年間cでコーディングしておらず、文字列操作が機能しない理由に完全に困惑しています。私は永遠にループするプログラムを書いています。ループでは、2つのcharポインターを初期化し、それぞれがcharポインター(配列)にテキストを追加する関数に渡されます。関数が完了したら、charポインターを出力し、2つのcharポインターを解放します。ただし、プログラムは7回の反復後に終了し、次のエラーメッセージが表示されます。

*glibcが検出されました* ./test:ダブルフリーまたは破損(ファストトップ):0x0804a168 ***

0 投票する
1 に答える
317 参照

c - c realloc struct-g_hash_table

私は次のコードのようなことをしています。私はすでに一度AddtoStructFunction()充填を通過しmystructました。さて、私がやりたいのは、すべての新しいエントリをに直接追加することです。新しいキーを含む全体をmystruct解放mystructして繰り返し、g_hash_tableそれらをに挿入する必要はありませんmystruct

これを行うための良い方法は何でしょうか?新しいエントリをそれぞれ再割り当てしますか?