問題タブ [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.
mmap - strdup後にmmapが壊れた
mmapを使用して次の構成を試しました。
- ファイルを開く(ファイルが2 kBを超えている)
- ファイル*f_file*から統計を要求する
- マップファイル(ファイルはページよりも小さい、オフセットページ0、サイズは予想されるサイズ)
- マップ*f_fpage*の*f_footer*の値を確認します
- 使用法strdup
コード:
読み取り/書き込みを使用しましたが、ファイルは最大2Kbのゼロで埋められています。ファイルサイズとページサイズがゼロのmmapをパラメーター化しましたが、 mmapがファイルのマップに失敗します。
マップするファイルに追加のプロパティを含める必要がありますか?
ファイルを最初からマップしたい場合、「0」はmmapのオフセットとして許容できるパラメーターですか?
c++ - strdupを使用すると、std::findが機能しません
私はstd::vector
いくつかの文字列を格納するためにを使用していますが、後でstd::find
それらを試しますが、サンプルコードに示されているように、strdupを通過します。これは機能せず、std::find
最後に戻ります。つまり、文字列が見つかりませんでしたが、そこで、関数を介してアクセスすると、std::vector::at
正しく表示されます。何が問題ですか?
c++ - StrDupがwhileループにあるときにMallocとStrDupを一緒に使用する方法は?
ここにコードがあります。構造体にメモリを割り当てるために malloc を使用しています。この構造体の 1 つのメンバーには、while ループ内で StrDup を使用して文字列が割り当てられますが、他のメンバーは値を変更する必要はありません。現在、StrDup を使用しているため、メモリをクリーンアップする必要があります。そうしないと、メモリ リークが発生しますが、メモリのクリーンアップによって構造体の malloc が破損します。私は何をすべきか?前もって感謝します。
objective-c - Obj-C: strdup フレームの Malloc 48 バイトのメモリ リーク
私のアプリでは、複数のメモリ リークが発生しています。オブジェクトは Malloc 48 バイトで、常に責任のある呼び出し元 strdup から発生します。オブジェクトの履歴は、Malloced であることのみを示し、その他の保持または解放はありません。スタック トレースに私のコードが表示されません。私が選ぶことができる唯一の関連性は次のとおりです。
マップ ビューをスクロールしているときに発生するようですが、スタック内でコードが参照されていないため、どうすればよいかわかりません。このリークの診断はどのように進めればよいですか?
さらに情報が必要な場合は、お知らせください。
よろしく、ニック
c - strdup関数が失敗したとき?
strdup 関数を使用する次のコードがあります
ソース文字列は正常に表示されますが、どの状況で失敗するのか、また日常の問題でどのように使用されているのか興味深いのですが、strdup によって決定されることがわかっています。
文字列が NULL でない場合、strdup 関数が失敗する可能性はありますか?
c - Ubuntu の strdup() でクラッシュする
C プログラムを Ubuntu で実行しようとすると、セグメンテーション エラーが発生します。スタック トレースは次のとおりです。
これがクラッシュしている機能です
iphone - 「strdup」リーク - 不明な理由
Instruments を使用してコードのリークをチェックすると、解決策がわからないエラーが表示されます。それはこれです:
Malloc 48 バイト 責任のあるライブラリ - libsystem_c.dylib 責任のあるフレーム - strdup
私はこれをググってみましたが、いくつかの提案は人々にそれを残すように伝えていますが、アップルにリークを提出するのはばかげているようです.から来る?
c - 同じ左辺値を持つ strdup() への複数の呼び出し
私が前任者から受け継いだプログラム全体を通して、次の形式の関数があります。
つまり、最後のパラメーターは、char **
メッセージを返すために使用される です。つまり: somefunc()
will "change" msg
. 場合によっては、問題の変更は次の形式になります。
への各呼び出しには、割り当てられたメモリを解放するためstrdup()
の関連する呼び出しが必要であることを知っています。free()
そのメモリは何かを返すために使用されるため、明らかに最後に解放されるべきではありませんsomefunc()
。
しかし、どこで?
が同じsomefunc()
メッセージで複数回呼び出された場合、そのポインターは動き回ると思います。前の呼び出しで割り当てられたスペースは失われますよね?
プログラムの終了前のどこかで、私は確かにすべきfree(*msg)
です。(この場合*msg
、 への呼び出しでパラメーターとして使用されるバージョンです。)しかし、その呼び出しは、への以前の呼び出しで割り当てられたメモリではなく、最後somefunc()
に割り当てられたメモリのみを解放すると思いますよね?somefunc()
だから、私はそれsomefunc()
が次のようになるべきだと言っているのは正しいですか:
そのため、 のfree()
前にstrdup()
.
私は正しいですか?
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 を使用すると、完全に機能しました。
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:ジョナサンのコメントによると、これらも機能します