問題タブ [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 投票する
8 に答える
11345 参照

c - Cの関数に動的配列を渡す

配列を引数として取り、それに値を追加し(必要に応じてサイズを増やします)、アイテムの数を返す関数を作成しようとしています。これまでのところ、私は持っています:

これは、mSize が配列のすべての潜在的な要素を保持するのに十分な大きさである場合に機能しますが、サイズ変更が必要な場合は、セグメンテーション フォールトが発生します。

私も試しました:

無駄に。

これは、realloc を呼び出すと、'a' のコピーが別の場所を指しているためだと思います。'a' が常に同じ場所を指すようにするにはどうすればよいでしょうか?

私はこれについて正しく行っていますか?C で動的構造を処理するより良い方法はありますか? これらに対処するためにリンクされたリストを実装する必要がありますか?

0 投票する
8 に答える
22126 参照

c - realloc と memcpy はどのように機能しますか?

2 つの質問があります。

  1. 各要素を反復するよりも速い方法で、配列内のエントリを別の配列にコピーしrealloc()ますか? 答えが「はい」の場合、その複雑さは何だと思いますか?memcpy()O(N)

  2. 割り当てられたサイズが元のサイズよりも小さい場合、realloc()エントリを別の場所にコピーするか、配列のサイズを縮小しているためそのままにしますか?

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

c++ - C++ コードでの realloc 実装の使用に関する質問

友達

私たちの C++ では、現在、realloc メソッドを使用して、malloc によって割り当てられたメモリのサイズを変更しています。realloc() の使用法は以下のように行われます

現在ウィキペディア (_http://en.wikipedia.org/wiki/Malloc) は次のように述べています。

代わりに

big_size バイトのメモリを取得できない場合、p の値は NULL になり、以前に p に割り当てられたメモリへのポインタがなくなり、メモリ リークが発生します。

また、上記のエラーを修正する正しい方法は


realloc() を使用する最良の方法を教えてください。

また、構造体へのポインターを取得したら、後でreallocを使用しているときに、voidへのポインターを使用できますか???

どうもありがとう

0 投票する
17 に答える
2482 参照

c++ - Realloc()/C++ での文字列実装用のオブジェクトのサイズ変更

それらがメモリで表現される場合、C++ オブジェクトは C 構造体と同じですか?

たとえば、C では、次のようなことができます。

+C++ では組み込み型の演算子をオーバーロードできないと思いますchar *

だから私は余分なオーバーヘッドがない独自の軽量文字列クラスを作成したいと思いますstd::stringstd::string連続して表されていると思います:

まったく同じ機能が必要ですが、長さの前に付けることはありません (8 バイトのオーバーヘッドを節約できます)。

テストに使用しているコードは次のとおりですが、セグメンテーション違反が発生します


編集:誰も私がやりたいことを本当に理解していません。はい、クラス内の文字列へのポインターを持つことができることはわかっていますが、それはプレーンな cstring よりも 8 バイト高価です。まったく同じ内部表現が必要でした。でも試してくれてありがとう


編集:私が達成したかったことの最終結果は、strcat などを使用する場合と比較して、追加のメモリ使用量なしで + 演算子を使用できることでした。

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

c++ - STL vector は realloc のより良いバージョンですか?

C++ では、再割り当てを処理するより良い方法は、STL ベクトルを使用することだと思います。これにより、連続したストレージの場所が保証されます。

違いを理解するためにいくつか質問があります:

  1. vectorよりもreallocを優先する必要があるシナリオはありますか?
  2. C++ のreallocと同等のもの ( vector 以外) はありますか?

ありがとう、

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

c - reallocを使用したバッファのサイズ変更

指している領域が移動した場合、free(ptr)が実行されます。

上記の行について説明していただけますrealloc()か?この行は、calloc、malloc、realloc、およびfreeのmanページからのものです。

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

c++ - 以前は安定していた関数で再割り当てがクラッシュする

どうやら SDL_Mixer のこの関数は死に続けているようですが、その理由はわかりません。誰にもアイデアはありますか?Visual Studio によると、このクラッシュは、Windows が realloc() 行のどこかでブレークポイントをトリガーすることによって発生します。

問題のコードは、特に SD​​L_Mixer の SVN バージョンからのものです。違いがある場合。

私は Visual Studio 2008 を使用しており、music_decoders と num_decoders はどちらも正しいです (music_decoders には文字列 "WAVE" へのポインターが 1 つ含まれており、music_decoders.ptr は 0x00000000 であり、私が知る限り、クラッシュは realloc にあるようです() 関数. このクラッシュの問題を処理する方法を知っている人はいますか? この問題を解決するために、多少のリファクタリングを行う必要はありません。

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

c - **構造体の再割り当てに関する問題

C の realloc 関数に問題があります。次のコードを渡します。

最初の割り当てコードを送信していませんが、そこで使用しているアイテムの数を増やすと、すべて正常に機能します。realloc を呼び出すと、次のようなエラーが発生します。

malloc: *** オブジェクト 0x19dba8 のエラー: 再割り当てされるポインターが割り当てられませんでした

私の問題を解決するのを手伝ってくれませんか?


プールの作成方法は次のとおりです。

私が言ったように、たとえば1000個のアイテムを挿入し、create関数によってメモリを割り当てたい場合、100個の要素の開始プールサイズを宣言してからアイテムを再割り当てしたい場合、エラーが発生します。

このような迅速な回答をありがとうございました。

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

c - 再割り当ての問題

ご覧いただきありがとうございます。無視してください- あらゆる種類のシェナニガンが発生しており、さらにデバッグしようとしています。

=====================================

realloc のこの動作を説明できる人はいますか?

出力:

コード:

再割り当て後に最初から「ncryp」を削除しています。しかし、それは起こるはずがありません....

編集:より多くのコード、より多くの出力

最終編集:

現時点で何が起こっているのかわかりません。デバッグ フラグを使用するプログラムと使用しないプログラムを実行すると、異なる出力が生成されます。設計図に戻り、valgrind を使用してメモリ エラーを探します。

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

performance - 動的スタックタイプを実装する最良の方法は?または私はreallocを悪用していますか?

ネイティブスタックタイプを持たないあいまいな言語を使用しているので、独自の言語を実装しました。今、ネットで読んで、私はこれを行うためのいくつかの異なるアプローチを見つけました。

これは私の実装です(疑似コード)

値をポップした後にrealloc()呼び出しを使用してスタックのサイズを変更すると、パフォーマンスが低下すると言う人もいるので、いくつか質問があります。

  1. mallocを使用してスタックを拡張し、プログラムの最後に解放するのが最善ですか?
  2. スタックのサイズを変更(プッシュ)するには、4バイト以上増やすのが最適ですか?
  3. いっぱいになったときに割り当てられたメモリを2倍にして、スタックを増やすのがベストプラクティスですか?
  4. 上記のコードについてどう思いますか?