問題タブ [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.
c - 呼び出し元が malloc されたポインターを確実に渡すようにするにはどうすればよいですか?
引数として指定されたポインターを新しいサイズに再割り当てする関数があります。さて、問題は、マニュアルページによると、以前realloc
に返されたポインタが必要なことです。malloc
calloc
呼び出し元がこれらの要件を満たすポインターを渡すことを確認するにはどうすればよいですか? そうするための組み込みの C メカニズム (型修飾子など) はないようです。
さて、API を再構築する前に (現在の関数は十分に堅牢ではないと考えているため)、何かを見逃していないことを確認していただけますか?
前もって感謝します。
編集: 1 つの解決策は明らかに関数内で mallocすることです。それに関する問題は、呼び出し元が割り当てを「見ない」ことです。したがって、ドキュメントで明示的に、ポインターを解放する必要があると言う必要があります。これは、malloc されたポインターを提供することを期待するよりもさらに悪いことです (これは、呼び出し元がポインターを解放する必要があることを意味します)。
私が本当に欲しいのは、コンパイル時に悪用をブロックするものです。それとポニー。;-)
c - 失敗して NULL を返すときの realloc() の正しい使い方は何ですか?
の正しい使い方を要約できる人はいますrealloc()
か?
realloc()
失敗した時どうする?
私がこれまで見てきたことから、realloc()
失敗した場合はfree()
古いポインターを使用する必要があるようです。本当?
次に例を示します。
linerealloc()
で失敗したとします3
。私はing5
によってオンラインで正しいことをしていますか?free()
ptr
c - reallocはどのくらいコピーするかをどのように知っていますか?
reallocは元のデータのサイズをどのように知るのですか?
したがって、実装が次のような場合:
これは元の実装ではなく、reallocが常に無料であるとは限りませんが、無料である場合、どのくらいコピーしますか?
編集:答えてくれてありがとう。しかし、malloc / free / ..を使用してコードにreallocを実装するにはどうすればよいですか?
c++ - C ++でどのように「再割り当て」しますか?
realloc
C++ でどのようにすればよいですか? それは言語に欠けているようです - new
andはありますdelete
が、ありませんresize
!
プログラムがより多くのデータを読み取ると、それを保持するためにバッファーを再割り当てする必要があるため、これが必要です。delete
古いポインターを使用しnew
て新しい、より大きなポインターを使用することは正しい選択肢ではないと思います。
c - realloc:ポインタ配列を逆にしましたか?
必要に応じて内部配列バッファーを自動的に拡張する、かなり単純な(っぽい)スタック実装を作成しました。
そのために、私は当然reallocを使用します-それは機能しますが、すべての配列要素はrealloc()呼び出しの後に逆の順序になります。
問題のコード:
この例では、次の動作がトリガーされます。
私はこれについて本当に無知です。助けてください!
c - メモリのシーケンシャル スペースがない場合、realloc はどうしますか?
realloc
メモリを動的に再割り当てするために使用されます。
関数を使用して 7 バイトを割り当てた後、malloc
それを 30 バイトに拡張したいとします。
メモリに 30 バイトのシーケンシャル (1 行で連続) スペースがない場合、バックグラウンドで何が起こるでしょうか?
エラーがありますか、それともメモリが部分的に割り当てられますか?
c - 単純な c malloc
malloc
C/C++ 用の/のさまざまな洗練された実装がたくさんありますがfree
、固定サイズのバッファーで動作し、realloc
. スレッドセーフなどは必要なく、私のオブジェクトは小さく、サイズもあまり変わりません。推奨できる実装はありますか?
編集:
この実装を受信側の通信バッファーに使用して、可変サイズ (受信側には不明) のオブジェクトを転送します。割り当てられたオブジェクトは長くは存続しませんが、同時に複数のオブジェクトが使用される可能性があります。
誰もが標準の malloc を推奨しているようなので、質問を再構成する必要があるかもしれません。私が必要としているのは、自分のニーズに合わせて最適化を開始できるバッファー上での malloc の「最も単純な」実装です。最適化されたmallocを探しているのではなく、単純なものだけを探しているため、おそらく元の質問は不明でした。glibc-malloc から始めて拡張したくはありませんが、軽量のものを使用します。
c - realloc で縮小する
この質問でこの小さなコードに遭遇し、知りたかったのですが、
realloc()
指しているメモリ空間が縮小されている場合、関数はメモリ ブロックを別の場所に移動できますか?
可能であれば、どのような条件下でb
、住所とは異なる住所を期待できa
ますか?
c - 左側の配列を再割り当てして縮小できますか (C のみ)?
メモリ内にある大量のデータを移動したい。残念ながら、このデータは配列として保存されており、それを変更することはできません。変更したくないいくつかの fortran メソッドでも同じメモリが使用されているため、循環配列を使用できません。その上、配列は移動の合間に非常に頻繁にアクセスされます。だから私はこれを行うことができます:
これはうまくいくはずですが、無駄に見えます;)。縮小する配列の左側にあるデータを削除するようにコンパイラに指示できた場合、データはメモリを通り抜けますが、コピーを行う必要はありません。このような:
したがって、基本的には、 へのポインターで終了し、array+1
残りの 4 バイトを解放したいと考えています。free()
andで遊んでみましmalloc()
たが、うまくいきませんでした... realloc によっても memcpy 呼び出しが発生する可能性があることは承知していますが、毎回ではありません! だから、もっと速いかもしれませんよね?
c - realloc は古い内容を上書きしますか?
経由でメモリを再割り当てするrealloc()
と、以前の内容は上書きされますか? データを入力するたびにメモリを再割り当てするプログラムを作成しようとしています。
realloc によるメモリ割り当てについて教えてください。たとえば、コンパイラに依存しますか?