問題タブ [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後の動的メモリストレージの問題-C
学校での課題の場合、構造体を使用して、無限の量の行列に対して無限の量のポイントを格納できる行列を作成する必要があります。(理論上の無限)
割り当てには、callocとreallocを使用することにしました。マトリックスのサイズは次のとおりです。ポイントの制限に達するたびにサイズが2倍になります(つまり、1から始まり、2、4というように続きます)。また、マトリックスが追加されるたびにサイズが2倍になります。
これが私の問題です。最初の行列が追加され、2番目の行列の名前とポイントが追加されると、次のようになります。
B???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Bは私が欲しい部分です(後でstrcmpを使用するので)が、?マークはそこにあるはずではありません。(明らかに)
なぜそれが正確にこれを行っているのかわかりません。コードはモジュール式であるため、コードの一部を取得して、これがどのように行われているのかを正確に示すことは簡単ではありません。
注:次の方法でマトリックスのポイントにアクセスできます:(MyMatrix[1].points[0].x_cord;
これは単なる例です)
問題を引き起こすサンプルコード:
構造体:
マトリックス関数の設定:
行列関数の成長:
行列を一度大きくした後にこの問題を出力する行列関数を追加します。
c - 構造体内の配列と構造体のmalloc
ある構造体が別の構造体の中にある構造体をどのようにmallocしますか?
また、構造体内のアイテムの配列をmallocし、必要に応じてこの配列を再割り当てしたいのですが、これはどのように正しく行われますか?
構造体を宣言し、次に上記を宣言する例を教えてください。
物事の順序が少しわかりません。
構造体内の配列を解放してから、構造体自体を解放しますか?構造体を作成するときに構造体をマロックし、次にそのフィールドをマロック/宣言する必要がありますか?
c - c 0 からのメモリの再割り当て
CでポインタからNULLへのメモリを再割り当てすることは可能ですか?
c++ - realloc 呼び出しによってどのくらいのオーバーヘッドが発生しますか?
10000回以上反復realloc
するループのすべての反復で使用しています。for
これは良い習慣ですか?何realloc
度も呼び出された場合、エラーが発生しますか?
c - 予期しない realloc() の動作
より大きなプログラムの一部として、多項式の導関数の係数を計算するメソッドがあります。しかし、それは問題ではありません:)。次のコードでは、realloc() 呼び出しをスキップすると、期待どおりの結果が (*coef) に表示されます。realloc を使用すると、要素の 1 つが 0 に設定されます。これは私のせいですか、それとも realloc() の動作は実際には予期しないものですか?
また、テスト プログラムの完全なソース コードを添付します。
c - 宿題のヘルプを再割り当てする
割り当てのために、私がしなければならないことの一部には、malloc
との使用が含まれますrealloc
。最初に char の 2D 配列を作成します。次元は行数と文字数です。次にmalloc
、いくつかのファイルからの入力を格納するのに十分なメモリを割り当てるために使用します。を使用fgets
して、一度に 1 行ずつ読み取り、配列に格納します。この部分はうまく機能します(またはそう思います)。必要に応じてより多くの行にメモリを再割り当てしようとすると、問題が発生します。プログラム フローは次のようになっているはずです。
1 行あたり 80 文字で、50 行の文字配列を作成します (機能)
fgets
一度に 1 行ずつ読み取り、配列に保存するために使用します (作業中)。
50行が読み取られたら、配列を再割り当てして100行を許可します(機能しません)
必要に応じて再割り当てを続ける (機能しない)
これは私がこれまでに持っているものです(少なくともその核心、無関係なコードを省略しました):
私の直感では、realloc
問題は.
最初の引数 はlines
、一定量のメモリを再割り当てしたいポインタです。NUM_OF_LINES
サイズを大きくしたい量です。これに を掛けますreallocLinesCount
。これは、必要な 50 行のセット数を追跡するカウンターです。部分は、へのsizeof(*lines)
ポインターのサイズですchar
。
読んでいただきありがとうございます。どんな助けでも大歓迎です:)
編集: 返信ありがとうございます。今すぐすべての回答を読む時間はありませんが、この差し迫った締め切りが過ぎれば、すべての回答をより完全に読んで理解することができます :D
c - 再割り当てエラー: 解放されたオブジェクトのチェックサムが正しくありません
stdin からデータを読み取るコードを作成しようとしています。
しかし、次のように実行した後: ~# dd if=/dev/zero bs=1024 count=8 | ./test このエラーがあります:
誰でも私を助けてください。
c++ - realloc が機能しないのに malloc が機能するのはなぜですか?
realloc がポインターを返さなくなるポイントに到達しました。配列を拡張または移動するためのスペースが不足していると思います。唯一の問題は、そのメモリが存在する必要があるか、アプリケーションが期待どおりに実行できないことです。そのため、malloc を試すことにしました。なんで?
次に、ポインターの配列を新しく割り当てられた配列にmemcpyしましたが、それが壊れていることがわかりました.0x10や0x2bなどのポインターが配列に入れられました。実際のポインターはありますが、memcpy を for ループに置き換えると修正されます。なぜmemcpyはそれをしたのですか?コードで memcpy を使用すべきではありませんか?
コード:
すべての修正の後、コードはおそらく初期化されます。ここで興味深いのは、配列を並べ替えた後、malloc を使用して巨大な配列を割り当て、配列を 1 つの配列に並べ替えて GL_ARRAY_BUFFER として使用することです。スペース不足のために realloc が割り当てられていない場合、なぜ割り当てられないのでしょうか?
最後に、これにより最終的にクラッシュします。クラッシュしたらレンダリング機能を通過した後。すべての修正を削除し、realloc が割り当てられないときにキャッチした場合、問題なく動作します。これは疑問を投げかけます.私の配列を再割り当てする代わりにmallocすることの何が問題なのですか?
私の配列は、フロートのポインターのポインターです。配列を大きくすると、浮動小数点数へのポインターに変換され、再割り当てされます。私は Android でビルドしているため、メモリが不足していると想定しました。
c - Realloc 対リンクされたリストのスキャン
ファイルから不明な数の行を読み取り、それらを構造体に保存する必要があります (要素の総数をカウントする前処理を避けたいと思います)。読み取りフェーズの後、これらの行の各要素に対していくつかの計算を行う必要があります。
私は2つの方法を考え出しました:
realloc
行を読むたびに使用します。この方法では、割り当てフェーズは遅くなりますが、計算フェーズはインデックス アクセスのおかげで簡単になります。行を読み取るたびにリンクされたリストを使用します。この方法では、割り当てフェーズは速くなりますが、計算フェーズは遅くなります。
複雑さの観点からは、どちらが優れていますか?
c - VS 2010 での realloc の奇妙なエラー
私はコードをもっている:
BLOC_NOTE の 3 番目の要素で、プログラムがクラッシュします。
VSは、OS Windowsがブレークポイントを開始したと言っています...
どうしたの?
編集
コメントからコードをここに移動