void x()
{
strcpy(a, strdup(p));
}
のstrdupと
(エラー)配分、strcpyのは、それを解放しないSTRDUP()をし、strcpyの
誰もが上記の文と一緒に間違っていると、なぜ私はこのエラーを取得しています何を教えてもらえますか?
void x()
{
strcpy(a, strdup(p));
}
のstrdupと
(エラー)配分、strcpyのは、それを解放しないSTRDUP()をし、strcpyの
誰もが上記の文と一緒に間違っていると、なぜ私はこのエラーを取得しています何を教えてもらえますか?
問題は、メモリがリークしていることです。 strdup
を呼び出すと、解放されていないメモリが割り当てられます。 strcpy
に渡されたメモリへのポインタは決してどこにも保存されないので、コンパイラはそれが漏洩していることを証明することができます。
strdup
は割り当てとコピーの両方を実行しているため、何をしようとしているのか分かりません。strcpy
の呼び出しは不必要なようです。
問題はstrdup
で、malloc()
が呼び出され、コードに結果のポインタが渡されます。あなたのコードはその割り当てられたメモリの所有権を取らず、それは漏洩しています。あなたは、コードは大体このやっている:
char* duplicate = malloc(strlen(p)+1); //first part of strdup
memcpy(dupliate,p); //second part of strdup
memcpy(a, duplicate);//memcpy in your code
に上記のコードを
をfree()
メモリは
duplicate
によって指されていません。
これに似た何かをするのstrdupは(paxdiablo's answer here)から撮影: -
char *strdup (const char *s) {
char *d = malloc (strlen (s) + 1); // Allocate memory
if (d != NULL)
strcpy (d,s); // Copy string
return d; // Return new memory
}
はSOのstrdup内で割り当てられたメモリをリークすると、そのエラーにつながる一体が何であるかを
メイト、私のコードを "持ち上げ"ようとするなら、私に信用するか(http://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c/252802#252802)、またはちょっと編集して事実を隠す:-)ちょうど冗談ですが、私はちょうど戻ってきて、その答えを最近編集したので、すぐにそれを認識しました。 – paxdiablo
。あなたは何をしようとしていますか? –
何も:実際にはプログラミングを始めましたが、フォームを読んでいるうちにこの関数がいくつかの組み合わせを試してみました...(楽しみのため) – lokesh
あなたの必要に応じて、 'a = strdup ( 'a'はすでに十分な大きさのバッファを指していると仮定します)'( 'a''は動的に割り当てられます)' strcpy(a、p); 'これらの呼び出しを組み合わせるのは無意味です。 – visitor