私によると、次のコードは正常に実行されるはずですが、実行時に失敗します.理由がわかりません:
void main()
{
int arr[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *m=arr[0];
int **p=&m;
p=p+1;
printf("%d",**p);
}
a.exe は、gcc コンパイラ、Windows 7 64 ビットで実行時に動作を停止しました
私によると、次のコードは正常に実行されるはずですが、実行時に失敗します.理由がわかりません:
void main()
{
int arr[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *m=arr[0];
int **p=&m;
p=p+1;
printf("%d",**p);
}
a.exe は、gcc コンパイラ、Windows 7 64 ビットで実行時に動作を停止しました
ラインと
int **p=&m
整数へのポインターへのポインターを作成します。
次に、アドレスに 1 を追加します。つまり、次の整数を指すバイト数の 1 倍ではなく、1 つのメモリ アドレスです。
次に、それを 2 回参照します。
ここint **p=&m;
に。p
を指しm
ます。次に、 p が(integer)p = p + 1;
の次のアドレスを指す場合。m
そのアドレスにアクセスできない可能性があります。