96744


Windows 11のVisual Studio Community 2022でC言語を勉強してます。  
動的メモリ確保をするために`<stdlib.h>`の`malloc()`関数を使って次のようなコードを書いたとしましょう。

[code]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char *p,*q=0; // q is NULL
        p=(char*)malloc(sizeof(char)*6); // malloc of p
        strcpy(p,"Hello");
        strcpy(q,p); // Run-time error BEFORE free(p)
        free(p);
        printf("%s",q);
        return 0;
    }
    
[/code]

上の`strcpy(q,p);`でRun-time errorが発生してしまい、ポインタ`p`が`free()`されずにコードの実行が止まるんです。  
そのとき、`p`が確保しているヒープメモリはメモリリークの原因になりますか？  
よくミスったりして`free()`する前にRun-time errorが発生してコードの実行が止まったことが何度もありましたので気になりました。


CC BY-SA 4.0
2023-11-10T15:26:29.637
96741
2023-11-10T15:52:19.377
60230
question
c
動的でメモリを確保した後のRun-time errorについての質問です。


メモリリークの原因にはなりません。

Windows を含むモダンな OS はプロセスを生成するときにそのプロセスが利用する専用のメモリ空間を割り当てます。
プロセスが終了したならそのプロセスに対応するメモリ空間を回収してしまうのでプロセス内で使っていた個々のメモリ (`malloc` で確保したメモリ) を
`free` していようといまいと関係なくまるごと後始末されます。


CC BY-SA 4.0
2023-11-10T15:52:19.377
96744
2023-11-10T15:52:19.377
3364
96741
answer