回答編集履歴
1
微修正
    
        answer	
    CHANGED
    
    | @@ -10,6 +10,7 @@ | |
| 10 10 | 
             
            `pathbuf->ptr = malloc(INITLEN);`は、malloc()によって大きさINITLENのユーザーが好きに使って良い領域を(何らかの正当な方法で、誰かから)「借り」てその領域のアドレスをpathbuf->ptrに記憶します。
         | 
| 11 11 | 
             
            続いておこなう`pathbuf->ptr = "abc"`は、メモリのどこかに"abc"というデータを持った領域を作成し(あるいは作成しておき)、その領域のアドレスをpathbuf->ptrに上書きします(それまでに入っていたデータは失われます)。
         | 
| 12 12 | 
             
            さて借りた領域のアドレスはわからなくなってしまいました。借りたものは返さなければいけないのですが...小さなサイズだからしらばっくれるとか、OSがある場合は破産(プログラムが終了)したら勝手に回収される「はずだから」放置、というのはよいお作法ではありません。
         | 
| 13 | 
            -
            お作法で言えば、malloc()ではメモリ領域を借りられたことを確認する、つまりmalloc()の返り値がNULLでない)ことを「必ず」確認するのがお作法です。
         | 
| 14 13 |  | 
| 14 | 
            +
            お作法で言えば、malloc()ではメモリ領域を借りられたことを確認する、つまりmalloc()の返り値がNULLでない)ことを「必ず」確認するのもお作法です。
         | 
| 15 | 
            +
             | 
| 15 16 | 
             
            余談に近い話になりますが、Segmentation faultになるのはC/C++の仕事ではなく、OSの仕事です。Cのレベルでは、定数領域に書き込む行為は「未定義」(結果の保証はなにもしない)というだけ。現実としてはシステムによって「何事もなかったかのように書き換えられる」「書き込み操作は行われるがデータは変化しない」「(今回のように)OS等がちょっかいをかけてくる」などの結果が考えられますが、それはC言語の範囲で決まるものではありません。
         | 
