危険な_strdup関数
1201 ワード
_strdup関数は次のように定義されます.
定義から明らかなように、文字列コピーを行うとダイナミックスペースが宣言されますが、解放されず、メモリ漏洩の問題が発生し、解決方法は2つあります:1.コピーされた文字列の場合は、次のように手動で解放されます.
2.stringなどのc++stlコンテナをできるだけ使用する
stringが終了すると、メモリを自動的に解放できます.
char * __strdup (const char *s)
{
size_t len = strlen (s) + 1;
void *new = malloc (len);
if (new == NULL)
return NULL;
return (char *) memcpy (new, s, len);
}
定義から明らかなように、文字列コピーを行うとダイナミックスペースが宣言されますが、解放されず、メモリ漏洩の問題が発生し、解決方法は2つあります:1.コピーされた文字列の場合は、次のように手動で解放されます.
char *tmp=_strdup(str);
free(tmp);
2.stringなどのc++stlコンテナをできるだけ使用する
string tmp=str;
stringが終了すると、メモリを自動的に解放できます.