危険な_strdup関数

1201 ワード

_strdup関数は次のように定義されます.
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が終了すると、メモリを自動的に解放できます.