malloc を呼び出す関数内の場所を変更すると、セグメンテーション違反が発生します。このコードは正常に機能し、「End\n」を出力します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int **pptr;
if (!( *pptr = malloc(4) ))
return 1;
int *ptr;
if (!( ptr = malloc(4) ))
return 1;
ptr[0]= 1;
printf("Point 1\n");
free(ptr);
(*pptr)[0] = 1;
free(*pptr);
printf("End\n");
return 0;
}
ただし、この一見同等のコードは、セグメンテーション違反から「ポイント 1\n」の前で終了します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
if (!( ptr = malloc(4) ))
return 1;
ptr[0]= 1;
printf("Point 1\n");
free(ptr);
int **pptr;
if (!( *pptr = malloc(4) ))
return 1;
(*pptr)[0] = 1;
free(*pptr);
printf("End\n");
return 0;
}
私は何が欠けていますか?(ちょっと初心者です)
その他の情報: gcc を使用して、Ubuntu で Netbeans を使用しています。