問題タブ [free]
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 - 自由質問
これはcで大丈夫ですか?
c - ヒープと無料の宿題
最後の手段としてここに投稿します。私は完全に立ち往生しており、これをどこに持っていくべきかわかりません。この質問では、答えではなく方向性を探しています。
私は、実際には非常に一般的な課題のように見える在宅ワークの課題を持っています。質問は11 ページにあります。これは私の課題ではありませんが、Google で見つけたもので、私の課題と非常によく似ています。
私のインストラクターは、私たちが見る必要がある関連情報はヘッダービットであるというガイダンスを与えました.
以下を実行しているとします。free(0x400b010)
0x400b010
が含まれています0x400b601c
。
この 16 進数を 2 進数に分割すると、特に最後のダブル ワードでは、次のようになります。
全体:
私が理解できることから、1c
これはこのメモリがすでに解放されていることを示しています。最後のビットが 0 であるためです。この場合、free の動作は未定義になります。
しかし、私の電車は正確ですか?私はこれを正しい方向に持っていますか?
c - free()エラー(valgrindを使用したデバッグ)?
私はこれらの構造体を持っています:
そして、アレイを作成しました
プログラムの最後に、メモリを解放したいのですが、関数は次のとおりです。
valgrindを使用してデバッグすると、valgrindは次のように言います。
そして、私がこれらのエラーを修正するのを手伝ってください、ありがとう。
c - C メモリ管理エラー?
これは私のCプログラムです:
gdb でデバッグすると、エラー メッセージは次のようになります。
valgrind メッセージは次のとおりです。
それらを修正するのを手伝ってください、ありがとう。
c - strtok とメモリ リーク
strtok() を使用して簡単な URL パーサーを作成しました。ここにコードがあります
ご覧のとおり、私は strtok() をよく使うので、URL を「スライス」できます。http や https 以外の URL をサポートする必要はないので、この方法ですべての問題が解決します。私の懸念は(これは組み込みデバイスで実行されています)-メモリを無駄にしていますか?のようなものを書くとき
そして、後で呼び出します
最初に保持されたポインタ ret->protocol はメモリに残りますか? 最初の呼び出しを tmp ポインターに設定し、ret->protocol を文字列の右側の部分に指定して strtok を呼び出し (2 番目の呼び出し)、次に free(tmp) を呼び出す必要があるのではないかと考えました。
strtok を使用する最良の方法は何ですか?
c - free はどのくらい解放するかをどのように知るのでしょうか?
C プログラミングでは、任意の種類のポインターを引数として free に渡すことができますが、free に割り当てられたメモリのサイズをどのように知るのでしょうか? 関数にポインターを渡すときはいつでも、サイズも渡す必要があります (つまり、10 要素の配列は、配列のサイズを知るためにパラメーターとして 10 を受け取る必要があります)。無料機能。配列の長さの余分な変数をカートに入れる必要がないように、独自の関数でこれと同じ手法を使用できますか?
c - C誰かがここで何が起こっているのか教えてもらえますか?
ここで一体何が起こっているのか理解できません。私が期待しているのは、出力にはキーに1つの要素しかないということです。つまり、120バイトで0の位置だけを割り当てた場合、7つの要素があるということです。
出力:hithere \ one \ two \ three 0 1 2 3 4 5 6 7 hithere \ one \ two \ three 0 1 2 3 4 5 6 7
文字列は私が期待するとおりですが、追加した要素は0だけなので、後には0だけを出力する必要があると思いました。free [0]だけでなく、各スポットを解放できるようにする必要がありますが、free [i]を出力するforループに入れると、スタックダンプが発生します。
以下の応答からの初期化に関して、2ではなく1000のような配列が必要な場合、1,000個の0を入力せずにすべてを0に初期化するにはどうすればよいですか。
c - 多次元char配列?
私がやろうとしているのは、文字列の2次元配列を作成することです。次のセグメンテーション違反は即座に発生しますが、何が問題になっていますか?
c - Cでmallocされた2D配列をfree()する最適な方法
このようなもので作成された2次元配列があるとすると、
まず第一に、これはこのような配列を作成する正しい方法でさえありますか?ここでの落とし穴は、「高さ」と「幅」は実行時に設定されるものです。
これはうまくいくようですが、これはこの2Dアレイを解放するための最良の戦略です。free(funge)は間違っているように聞こえます。ここにある他のいくつかの投稿を見ていくと、各行を1つずつ無料にすることができると思いますか?
私はこのようなことを試みました、
ただし、これにより、ダブルフリーポインタ例外が発生します。これは、このメモリを管理する必要がないという意味ですか?私は、mallocされたメモリごとに、free()を呼び出す必要があるという印象を受けました。
c - 割り当てられた文字列で strtok() を使用しますか?
malloc された文字列で strtok を使用することについて知っておくべきことはありますか?
私のコードでは(一般的に)
wheregetline()
は、char * を malloced メモリに返す関数です。とParse(dest, line)
は、オンラインで解析を行い、結果を に保存する関数ですdest
(以前に他の情報から部分的に埋められています)。
Parse()
strtok()
オンラインで可変回数呼び出し、いくつかの検証を行います。各トークン ( によって返されるものへのポインターstrtok()
) は、自分が持っている数がわかるまでキューに入れられます。
次に、それらは dest の malloc された char** にコピーされます。
ここfree(line)
で、dest の char*[] の各部分を解放する関数は、両方とも valgrind で次のように表示されます。
「アドレス 0x5179450 は、解放されたサイズ 38 のブロック内の 8 バイトです」
または似たようなもの。
トークンを char** に直接保存するのではなく、代わりにそれらのコピーを保存するようにコードをリファクタリングすることを検討しています (space == を strlen(token)+1 に malloc し、次に を使用しますstrcpy()
)。