動的でメモリを確保した後のRun-time errorについての質問です。


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が発生してコードの実行が止まったことが何度もありましたので気になりました。




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

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




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

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

