問題タブ [malloc]
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 - 関数によるデータの割り当て (ANSI C)
関数を介してデータを割り当てる方法を知りたいのですが、関数が返された後もデータはまだ割り当てられています。これは、基本型 (int、char**) とユーザー定義型の両方に当てはまります。以下は、コードの 2 つのスニップセットです。どちらも関数内に割り当てがありますが、戻り後に割り当てが行われます。
ユーザー定義型の場合でも、以前と同じ動作:
何か案は?ポインターを参照として渡す必要があると思いますが、どうすればよいですか?
事前にありがとう、日焼け止め
c - メモリを操作するときに sizeof( char ) を掛ける必要がありますか?
malloc を使用して同様のメモリ操作を行う場合、sizeof( char ) が常に 1 であることに依存できますか?
たとえば、 type の N 個の要素にメモリを割り当てる必要がありchar
ます。必要に掛けていsizeof( char )
ます:
または、 sizeof( char ) が常に 1 であることを信頼して、乗算をスキップできますか
コンパイル中に評価されることを完全に理解してsizeof
おり、コンパイラは乗算をコンパイルすることさえできるため、パフォーマンスの低下は最小限に抑えられ、ほとんどの場合ゼロになります。
私は主にコードの明瞭さと移植性について質問しています。この乗算は型に必要ですchar
か?
c - alloca()の使用が良い習慣と見なされないのはなぜですか?
alloca()
の場合のように、ヒープではなくスタックにメモリを割り当てますmalloc()
。したがって、ルーチンから戻ると、メモリが解放されます。したがって、実際には、これにより、動的に割り当てられたメモリを解放するという私の問題が解決されます。割り当てられmalloc()
たメモリの解放は大きな頭痛の種であり、何らかの理由で見落とされた場合、あらゆる種類のメモリの問題が発生します。
上記の機能にもかかわらず、なぜ使用がalloca()
推奨されないのですか?
c - Cの構造体の中にcharを設定するには?
構造体内の char 変数 (char ポインターではない) にメモリを割り当てるにはどうすればよいですか?
(変数名はポルトガル語です。少し混乱している場合は申し訳ありません)
私はこの構造体を持っています:
insere()
これは、入力ファイルから読み取った値を新しいノードに設定する関数です。
これNovoEstado->flag = flag;
は機能していません...
設定した直後に印刷NovoEstado->flag
すると正しい値が得られますが、その後for
関数の終わりまでに配置すると、印刷するNovoEstado->flag
とNovoEstado-> rotuloの最初の文字が取得されます...で
印刷しようとしても同じことが起こります...flag
main()
flag
にメモリ空間を適切に割り当てていないためだと思いますInsere()
が、そうですか?どうすれば修正できますか?
それは非常に簡単な質問であり、おそらくこれを一度知っていたと確信していますが、忘れてしまい、どこにも見つかりません...だから、どんな助けも大歓迎です
編集
ocdecio のヒントに従って、動的な 3 次元配列を作成するために、2 次元配列へのポインターを作成しました。
私の目標は、次のような「テーブル」を持つことです。
行数は動的ですが、常に 10 文字の 2 つの文字列の配列です。
だから今、これは私がメインでやっていることです:
しかし、これは機能していません...
これはファイルから読み取られた入力です
しかし、私が呼び出す前でさえ、これはその出力であるため、私が望む方法にInsere
正しい値を割り当てていませんinstrucao
printf
目指すものではなく
どうしたの?
(誰かが尋ねる前に、これは宿題の一部ですが、宿題ではありません。私の仕事は、決定論的有限オートマトン最小化ツールを作成することです。これは、データ入力に関連して発生する単なるバグです)
どうもありがとう
c - 解放後に変数をNULLに設定
私の会社には、メモリを解放した後、変数をにリセットするというコーディング規則がありますNULL
。例えば ...
上記のような場合、に設定しNULL
ても意味がないと思います。それとも私は何かが足りないのですか?
そのような場合に意味がない場合は、「品質チーム」に相談して、このコーディングルールを削除します。ご意見をお聞かせください。
c - C のループに malloc/free が現れるとセグメンテーション違反
基本的に次のようなプログラムがあります。
これは単なる骨格ですが、うまくいけば十分な画像が得られます. A とにかく、通常は正常に動作しますが、n1、n2 の一部の値では、free(cplptr) がセグメンテーション違反を引き起こすようです。これは 1 回だけ呼び出され、cplptr への malloc() 呼び出しの後、cplptr の対応する free() の前にアドレスをチェックします。
アドレスが一致しているということは、free() が解放すべきものを解放しているということですよね?? gdb は、プログラムが受信したシグナル SIGSEGV、セグメンテーション違反を示します。0xb7ce179b in ?? () /lib/tls/i686/cmov/libc.so.6 およびステップから 現在の関数の境界が見つかりません
セグメンテーション違反を回避するようなものを実装する別の方法はありますか?
あなたの提案をありがとう!何が起こっているのか分かりますか??
c - これはメモリをリークしますか?
文字列を連結し、結合された文字列を返す小さな関数を作成しました。ただし、関数の 3 番目の変数にメモリを割り当てているため、メモリは関数が終了したときに解放されますか、それともそこにとどまり、後で解放する必要がありますか? それを解放する必要がある場合、それを行うための最もスタイリッシュなソリューションは何ですか?
これがテストコードです。動作しますが、ツールでそのメモリが解放されているかどうかはわかりません。
c - ゼロ サイズの malloc
非常に単純な質問ですが、次のプログラムを作成しました。
また、私のマシンではセグメンテーション違反はありません。stdlib malloc と free の移植可能な動作ですか、それともトラブルを探していますか?
編集: 移植性がないように見えるのは、malloc によって返される値です。問題は、ptr の値ではなく、malloc(0) + フリーの組み合わせに関するものです。