"struct passwd"の使用に5ブロックのメモリリークを隔離しました。無駄にいくつかの異なる無料の(ユーザー)呼び出しを試してみました。この構造体はどのように解放されることになっていますか?トピックに関するいくつかの異なるSOの質問が、私はこの特定の構造体をどのように処理する必要があるかについてのほとんどのドキュメントを見つける。プログラムは別途問題なく動作します。ありがとう。struct passwdはメモリリークの原因です - どのように正しく解放するのですか?
#include <assert.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
pid_t pid = getpid();
uid_t uid = getuid();
struct passwd *user = getpwuid(uid);
unsigned int bufferMaxLen = strlen(".dir.") + strlen(user->pw_name) + 10;
char* dirName = malloc(bufferMaxLen * sizeof(char));
assert(dirName != NULL);
sprintf(dirName, "%s.dir.%d", user->pw_name, pid);
printf("bufferMaxLen is: %d\n", bufferMaxLen);
printf("Directory name is: %s\n", dirName);
free(dirName);
return 0;
}
メモリがリークしていることをどのように知っていますか? 'man getpwuid'は明示的に" *戻り値は静的領域を指し、getpwent(3)、getpwnam()、またはgetpwuid()の後続の呼び出しによって上書きされるかもしれません(返されたポインタを解放しないでください(3)を参照してください。)* " –
' getpwuid'の正確な動作はプラットフォーム固有のものだと思います。 – molbdnilo
valgrind <実行ファイルの名前> – Chris