問題タブ [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.

0 投票する
0 に答える
78 参照

mmap - strdup後にmmapが壊れた

mmapを使用して次の構成を試しました。

  1. ファイルを開く(ファイルが2 kBを超えている)
  2. ファイル*f_file*から統計を要求する
  3. マップファイル(ファイルはページよりも小さい、オフセットページ0、サイズは予想されるサイズ)
  4. マップ*f_fpage*の*f_footer*の値を確認します
  5. 使用法strdup

コード:

読み取り/書き込みを使用しましたが、ファイルは最大2Kbのゼロで埋められています。ファイルサイズとページサイズがゼロのmmapをパラメーター化しましたが、 mmapがファイルのマップに失敗します。

マップするファイルに追加のプロパティを含める必要がありますか?

ファイルを最初からマップしたい場合、「0」はmmapのオフセットとして許容できるパラメーターですか?

0 投票する
2 に答える
377 参照

c++ - strdupを使用すると、std::findが機能しません

私はstd::vectorいくつかの文字列を格納するためにを使用していますが、後でstd::findそれらを試しますが、サンプルコードに示されているように、strdupを通過します。これは機能せず、std::find最後に戻ります。つまり、文字列が見つかりませんでしたが、そこで、関数を介してアクセスすると、std::vector::at正しく表示されます。何が問題ですか?

0 投票する
2 に答える
569 参照

c++ - StrDupがwhileループにあるときにMallocとStrDupを一緒に使用する方法は?

ここにコードがあります。構造体にメモリを割り当てるために malloc を使用しています。この構造体の 1 つのメンバーには、while ループ内で StrDup を使用して文字列が割り当てられますが、他のメンバーは値を変更する必要はありません。現在、StrDup を使用しているため、メモリをクリーンアップする必要があります。そうしないと、メモリ リークが発生しますが、メモリのクリーンアップによって構造体の malloc が破損します。私は何をすべきか?前もって感謝します。

0 投票する
4 に答える
7928 参照

objective-c - Obj-C: strdup フレームの Malloc 48 バイトのメモリ リーク

私のアプリでは、複数のメモリ リークが発生しています。オブジェクトは Malloc 48 バイトで、常に責任のある呼び出し元 strdup から発生します。オブジェクトの履歴は、Malloced であることのみを示し、その他の保持または解放はありません。スタック トレースに私のコードが表示されません。私が選ぶことができる唯一の関連性は次のとおりです。

マップ ビューをスクロールしているときに発生するようですが、スタック内でコードが参照されていないため、どうすればよいかわかりません。このリークの診断はどのように進めればよいですか?

さらに情報が必要な場合は、お知らせください。

よろしく、ニック

0 投票する
3 に答える
3376 参照

c - strdup関数が失敗したとき?

strdup 関数を使用する次のコードがあります

ソース文字列は正常に表示されますが、どの状況で失敗するのか、また日常の問題でどのように使用されているのか興味深いのですが、strdup によって決定されることがわかっています。

文字列が NULL でない場合、strdup 関数が失敗する可能性はありますか?

0 投票する
1 に答える
1050 参照

c - Ubuntu の strdup() でクラッシュする

C プログラムを Ubuntu で実行しようとすると、セグメンテーション エラーが発生します。スタック トレースは次のとおりです。

これがクラッシュしている機能です

0 投票する
1 に答える
778 参照

iphone - 「strdup」リーク - 不明な理由

Instruments を使用してコードのリークをチェックすると、解決策がわからないエラーが表示されます。それはこれです:

Malloc 48 バイト 責任のあるライブラリ - libsystem_c.dylib 責任のあるフレーム - strdup

私はこれをググってみましたが、いくつかの提案は人々にそれを残すように伝えていますが、アップルにリークを提出するのはばかげているようです.から来る?

0 投票する
1 に答える
625 参照

c - 同じ左辺値を持つ strdup() への複数の呼び出し

私が前任者から受け継いだプログラム全体を通して、次の形式の関数があります。

つまり、最後のパラメーターは、char **メッセージを返すために使用される です。つまり: somefunc()will "change" msg. 場合によっては、問題の変更は次の形式になります。

への各呼び出しには、割り当てられたメモリを解放するためstrdup()の関連する呼び出しが必要であることを知っています。free()

そのメモリは何かを返すために使用されるため、明らかに最後に解放されるべきではありませんsomefunc()

しかし、どこで?

が同じsomefunc()メッセージで複数回呼び出された場合、そのポインターは動き回ると思います。の呼び出しで割り当てられたスペースは失われますよね?

プログラムの終了前のどこかで、私は確かにすべきfree(*msg)です。(この場合*msg、 への呼び出しでパラメーターとして使用されるバージョンです。)しかし、その呼び出しは、への以前の呼び出しで割り当てられたメモリではなく、最後somefunc()に割り当てられたメモリのみを解放すると思いますよね?somefunc()

だから、私はそれsomefunc()が次のようになるべきだと言っているのは正しいですか:

そのため、 のfree() strdup().

私は正しいですか?

0 投票する
1 に答える
832 参照

c - malloc と strdup を使用した構造体へのポインターへのポインター

私の主な意図は、メモリを割り当ててそのすべての値を埋める構造体、関数へのポインタを渡すことです。戻った後、画面に印刷します。

構造はこんな感じ。

この構造体の宣言は変更できないことに注意してください。私の主な機能は、このように非常に単純です。

}

fillArray 関数は、構造体に n + 1 メモリ ブロックを割り当てると想定しています。ここで、n は、存在するロックの実際の数です。一方、最後の (n+1) 番目のブロックはゼロで埋められます。そのため、メインから印刷しているときに、割り当てた構造体の長さを気にする必要なく、この状態を確認できます。

私の問題はfillArray関数にあります。

実はこのLINE100が問題を起こしています。実際には、すでに埋められている構造体のエントリを置き換えます。つまり、この行は dlock[0]->name を 0 で埋めます。一方、dlock[1] は変更されません。

私のgdbログはこのようなものを示しています.

これらはすべて、割り当てと値の入力後に取得されるログです。

メモ 1 とメモ 2 から、strdup が malloc によって既に割り当てられているメモリ位置を返したこと、つまり、strdup への最初の呼び出しが dlock[2] のアドレスを返したことは明らかです。どうしてこうなった。このため、 (*dlock+2)->name = 0 により dlock[0]->name が 0 で埋められました。

この問題を簡単に説明すると、Malloc は 3 つのアドレスを返してきました。簡単に理解できるように、{1000,1008,1010} としましょう。{1010,1018} を返す strdup を 2 回呼び出しました。

この 1010 と 1018 は、それぞれ char *name of lock[0] と lock[1] に格納されます。

誰かが私に教えてくれますか、私はこのコードで何か間違ったことをしていますか、それとも strdup の問題ですか (既に割り当てられたメモリブロックを割り当てています)

注: char *name を char name[20] に変更し、strdup の代わりに strcpy を使用すると、完全に機能しました。

0 投票する
1 に答える
1433 参照

c - Linux の strdup で使用されているマクロはどれですか?

StackOverflow のコード サンプルで strdup が使用されているのを確認し、Linux (3.0.0-21-generic x86_64) で使用しようとしました。

コンパイラ (clang) はそれが string.h にあることを認識していましたが、string.h が含まれていてもプロトタイプがないことに不満を漏らしていました。strdup は、string.h で定義された #if にラップされていることがわかります。このサイトを検索したところ、strdup はC 標準ライブラリ ルーチンではなくPOSIXルーチンであるという投稿が見つかりました。

それを公開する可能性のあるマクロは次のとおりです。

  • __USE_SVID
  • __USE_BSD
  • __USE_XOPEN_EXTENDED
  • __USE_XOPEN2K8

これらのそれぞれは、stdlib.h に含まれる features.h では定義されていません。

そのリストに POSIX マクロがないのはなぜですか? また、string.h で strdup を公開するために使用されているマクロ/コンパイラ スイッチはどれですか?

編集:以下のジムのコメントによると、

また

その上

システムで strdup を公開しないでください。

しかし、これらは次のことを行います。

編集 2: Keith のコメントによると、これも機能することがわかりました。

編集3:ジョナサンのコメントによると、これらも機能します