forkで発生するメモリの確保について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぷしゅ

forkで発生するメモリの確保について

#1

投稿記事 by ぷしゅ » 2年前

forkを、以下のようなプログラムで実行すると、子プロセスでリークが発生します。

コード:

int main()
{
    pid_t current_pid;
    char cmd_str[50];

    pid_t pid = fork();

    current_pid = getpid();
    sprintf(cmd_str, "%s %d %s\n", "leaks", current_pid, ">> leaks.txt 2>&1");
    system(cmd_str);
}
以下はleaks.txtの中身です。
==================================================
Process: a.out [42772]
Path: /Users/*/a.out
Load Address: 0x104708000
Identifier: a.out
Version: ???
Code Type: X86-64
Parent Process: zsh [38325]

Date/Time: 2021-09-07 14:14:35.426 +0900
Launch Time: 2021-09-07 14:14:35.184 +0900
OS Version: Mac OS X 10.14.6 (18G9216)
Report Version: 7
Analysis Tool: /Applications/Xcode.app/Contents/Developer/usr/bin/leaks
Analysis Tool Version: Xcode 11.3.1 (11C505)
----

leaks Report Version: 4.0
Process 42772: 146 nodes malloced for 13 KB
Process 42772: 0 leaks for 0 total leaked bytes.

Process: a.out [42773]
Path: /Users/*/a.out
Load Address: 0x104708000
Identifier: a.out
Version: ???
Code Type: X86-64
Parent Process: a.out [42772]

Date/Time: 2021-09-07 14:14:35.426 +0900
Launch Time: 2021-09-07 14:14:35.187 +0900
OS Version: Mac OS X 10.14.6 (18G9216)
Report Version: 7
Analysis Tool: /Applications/Xcode.app/Contents/Developer/usr/bin/leaks
Analysis Tool Version: Xcode 11.3.1 (11C505)
----

leaks Report Version: 4.0
Process 42773: 161 nodes malloced for 22 KB
Process 42773: 4 leaks for 4128 total leaked bytes.

4 (4.03K) << TOTAL >>

2 (2.02K) ROOT LEAK: 0x7febfb500040 [16]
1 (2.00K) 0x7febfc000800 [2048]

2 (2.02K) ROOT LEAK: 0x7febfb500050 [16]
1 (2.00K) 0x7febfc001000 [2048]
==================================================

mainの中で明示的にメモリを確保していないのに、メモリリークするのがどうしてかわかりません。
どなたかご教示いただけると助かります。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: forkで発生するメモリの確保について

#2

投稿記事 by あたっしゅ » 2年前

コード:

//
//
//
#include <cstdio>
#include <cstdlib>
#include <sys/types.h>
#include <unistd.h>


int
main()
{
    pid_t current_pid;
    char cmd_str[50];

    pid_t pid = fork();

    current_pid = getpid();
    sprintf(cmd_str, "%s %d %s\n", "leaks", current_pid, ">> leaks.txt 2>&1");
    system(cmd_str);
}
c++ でコンパイルしたら、No Leak だったみみ。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

TJJ

Re: forkで発生するメモリの確保について

#3

投稿記事 by TJJ » 2年前

Windows10 Home, WSL上のUbuntuでは、特に、メモリリークはございませんでした。
下記に、実行結果を示します。

コード:

tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$ ls
a.out  fork_homework.c
tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$ gcc fork_homework.c
tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$ ./a.out
tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$ ls
a.out  fork_homework.c  leaks.txt
tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$ cat leaks.txt
sh: 1: sh: 1: leaks: not foundleaks: not found

tjj@Noah:/mnt/c/Users/GALAXY/Programming/MyC/HomeWork$

返信

“C言語何でも質問掲示板” へ戻る