問題タブ [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 - Realloc 対リンクされたリストのスキャン
ファイルから不明な数の行を読み取り、それらを構造体に保存する必要があります (要素の総数をカウントする前処理を避けたいと思います)。読み取りフェーズの後、これらの行の各要素に対していくつかの計算を行う必要があります。
私は2つの方法を考え出しました:
realloc
行を読むたびに使用します。この方法では、割り当てフェーズは遅くなりますが、計算フェーズはインデックス アクセスのおかげで簡単になります。行を読み取るたびにリンクされたリストを使用します。この方法では、割り当てフェーズは速くなりますが、計算フェーズは遅くなります。
複雑さの観点からは、どちらが優れていますか?
c - VS 2010 での realloc の奇妙なエラー
私はコードをもっている:
BLOC_NOTE の 3 番目の要素で、プログラムがクラッシュします。
VSは、OS Windowsがブレークポイントを開始したと言っています...
どうしたの?
編集
コメントからコードをここに移動
c - memcpy() は realloc() を使用しますか?
このコードは、文字列「abc...xyz」全体を出力します。しかし、「buff」にはその文字列を保持するのに十分なメモリがありません。memcpy() はどのように機能しますか? realloc() を使用しますか?
c - メモリ割り当て
構造体の数値にメモリを割り当てるにはどうすればよいですか?
c - 構造体の配列を再割り当てします
ファイルとの間で読み込んだり、ユーザーが入力したりする構造体の配列 (実際には 2 つの構造体の配列ですが、簡単にするために 1 つ含まれています) のメモリを動的に再割り当てしようとしています。
...メイン()で:
次に、必要に応じて関数呼び出しを使用して配列を増やしようとしています。
残念ながら、再割り当ては機能しません。どちらの構造体もインスタンスあたり約 200 バイトしかなく、初期サイズを 10 に設定すると問題なく動作するため、realloc を使用しようとしている方法に問題があるはずです。
システムは Win 7 64 で、4GB の Core i5 で、Quincy (MinGW GUI) を実行しています。
c - 構造体の配列で realloc を使用する
私はこれについて何時間も頭を悩ませてきました。これは、テキスト ファイルから構造体にデータを読み取ります (各行には 4 つの文字列があり、各行は新しい学生を表します)。realloc でセグ フォールトが発生しています (終わり近く)。ポインターが malloc/realloc とどのように相互作用しているかを理解していない疑いがあります。
このセグフォルトの原因は何ですか?
前もって感謝します、
ガス
c - 標準 C ライブラリに、データをコピーしない realloc() のような関数がないのはなぜですか?
たとえば、次のような関数が必要です。
ご覧のとおり、関数 realloc() でバッファーのサイズを拡張したいだけですが、C ライブラリの realloc() は古いアドレスからデータをコピーする可能性があります。それで、私が望むようなライブラリに関数はありますか?
c - C-動的配列
n個の整数の長さの整数のリストを含むファイルをループしながら、fscanf()で配列をフィードしようとしています。mallocおよび/または潜在的にreallocを使用する必要があるようです。mallocコマンドにはかなりの実行時間がかかるため、割り当てを超過するのが最善だと聞きました。誰かがこの目的を達成するための構成要素を理解するのを手伝ってくれませんか?
免責事項:私はCを初めて使用します。
c - realloc() 使用時のエラー
realloc()
いくつかの配列を動的にサイズ変更するために使用しています。私は次のようなコードをたくさん書いていたからです:
次のようなことをしてコードを短くしようと思いました (ばかげた考え):
多くの行を節約したり、コードを読みやすくしたりしないため、これはばかげていますが、期待どおりに機能しない理由を知りたいです。GetSpace()
単一のオブジェクトに対してのみ使用すると、正常に機能します。関数を呼び出すオブジェクトを初期化せずにコードを実行すると、問題なく実行されますが、オブジェクトを呼び出してからGetSpace()
データを入れてからGetSpace()
別のオブジェクトを呼び出すと、次のようなメッセージでスタック トレースが表示されます。
0x00007fff05d96790
サイズ変更前の 2 番目の配列/オブジェクトのアドレスです。なぜこれが起こるのですか?