問題タブ [strdup]
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 - スレッドの問題: ヒープに格納された値
スレッドに問題があります。
グローバル変数、NULL に初期化する char *、およびミューテックスを定義しています。
次に、ミューテックスを初期化します。
次に、新しいスレッドを作成します。
その関数内で、strdup を使用して minURLTime にスペースを割り当て、リンクから文字列をコピーします。
(malloc を呼び出す strdup を介して) ヒープを使用しているため、スレッドが終了するまで minURLTime が NULL にならない理由がわかりませんが、その後は NULL になります。
pthread_exit が呼び出されると、minURLTime は strdup (malloc を呼び出す) によって割り当てられたグローバル変数ですが、NULL のように見えます。わかりません 誰か説明してくれませんか?
どうもありがとうございました、
編集:
もう少し詳しく。
main() から:
ExecuteThread 関数:
fprintf は実行されません (pthread_exit を返す前)。
executeRequest 関数:
これは役に立つかもしれません。スレッドが終了する前に、executeRequest 内では出力されますが、executeThread 内では出力されません。
ジャリー
c - strdup使用後にメモリを解放できません
gcc 4.5.1 c89
メモリを解放しようとしています。ただし、valgrindで確認したところ、メモリが解放されていません。私は何が間違っているのか疑問に思っています。
私は次の構造を持っています:
この構造のオブジェクトを作成します。
構造体にメモリを割り当てます。
それにいくつかのデータを割り当てます
次に、割り当てられたすべてのメモリを解放しようとします。
valgrindから次の出力が得られます。
なぜメモリが解放されないのかわかりませんか?
提案をありがとう、
g++ - strdup などの関数を明らかにするコンパイラ フラグ
受講しているクラスで完了する必要があるプロジェクトのスターター コードをいくつか受け取りました。コードは大学のコンピューターでは正常にコンパイルされますが、自分のコンピューターでコードをコンパイルしようとすると、関数呼び出し strdup が原因でエラーが発生します。私が収集できることから、これは strdup が ISO c99 関数ではないために発生します ( https://bugzilla.redhat.com/show_bug.cgi?id=130815 )。コードをコンパイルするにはどうすればよいですか? 追加のコンパイラ フラグを投入する必要があるだけだと思いますが、どれがどれかわかりません。私が実行した情報が必要な場合g++ -v
、出力は次のとおりです。
c - icu unicodeに相当するstrdupはありますか?
質問は自明です。C API を使用しています。
gcc - c++0x を使用した g++ での strdup エラー
C++0x コードがいくつかあります。以下で再現できました。以下のコードは問題なく動作-std=c++0x
しますが、実際のコードには必要です。
C++0x に strdup を含めるにはどうすればよいですか? gcc 4.5.2 で
私はmingwを使用していることに注意してください。私はcstdlib、cstring、string.hを含めてみて、std::を使ってみました。運がない。
コード:
c# - Vb.NetはStrDupをC#.netに変換します
私はこのコード行を持っています:
C#のこのコードに相当するものは何ですか?見つからないようです。
c++ - strdup または _strdup?
Microsoft Visual C++ で使用するstrdup
と、次の警告が表示されます。
警告 C4996: 'strdup': この項目の POSIX 名は非推奨です。代わりに、ISO C++ 準拠の名前 _strdup を使用してください。詳細については、オンライン ヘルプを参照してください。
したがって、それ_strdup
は正しいようです。
しかし_strdup
、GCC (Fedora Linux OS) で使用すると、コンパイラにエラーが表示されます。
エラー: '_strdup' はこのスコープで宣言されていません
GCC と Linux を使用すると、コンパイラは のエラーを表示しませんstrdup
。
どちらが正しいですstrdup
か_strdup
?
注:<string.h>
コードに含めます。
c - 型キャスト文字列とstrdup
入力const文字列が何らかの方法で変更されている場合(Cコンパイラの警告が発生します)、それを処理するための最良の方法は何ですか?新しい変数に型キャストしてから使用するか、複製して使用してから解放します。または、このタイプのシナリオを処理する他の方法はありますか。提案してください。どんな助けでもいただければ幸いです。
//型キャスト
//複製して無料
編集:それはCコンパイラです。C++ではありません。型キャストで、s2が文字列s1の新しいコピーになるのか、それとも元の文字列s1を指すのかわかりません。
答えてくれてありがとう。もう1つ疑問があります-
上記の割り当ては有効ですか?
string - 次のように strdup() を使用すると、C でメモリ リークが発生しますか?
char* XX (char* str) { // 既存の文字列を str で CONCAT し、ユーザーに返す }
そして、私はこのプログラムを次のように呼び出します:
XX ( strdup("CHCHCH") );
これにより、生成されたものを解放せずにリークがstrdup()
発生しますか?
free の結果がXX()
仕事をする可能性は低いです。
(C と C++ の両方で教えてください、ありがとう!)
c - strdupエラー:'操作は現在進行中です'
エラーはどういう意味ですか?redisコマンドから取得した値を返す必要があります。
これは、デバッガーを使用してゆっくりとステップ実行した場合でも発生します(ブロックアクションは長い間終了していると思われます)。Redis固有のエラー文字列は空です。reply->strには必要な正しい文字列があります。