このコードでは、 relied onがから whengdb
にp
変更されます(予想どおり)。0x602010
0x0
NULL
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 10;
// gdb output
int *p = (int *) malloc(sizeof(int)); // p = (int *) 0x602010
p = NULL; // p = (int *) 0x0
p = &a; // p = p = (int *) 0x7fffffffe15c
return 0;
}
しかし、がinp
の外で変更された場合、変更されないと思いますが、その理由はわかりません。main()
task()
0x0
#include<stdio.h>
#include<stdlib.h>
void tast(int *p);
void task(int *p)
{
/*
before
(gdb) p p
$1 = (int *) 0x7fffffffe15c (same as variable a)
(gdb) p &p
$2 = (int **) 0x7fffffffe128
*/
p = NULL;
/*
after
(gdb) p p
$3 = (int *) 0x7fffffffe15c no change?
(gdb) p &p
$4 = (int **) 0x7fffffffe128
*/
}
int main()
{
int a = 10;
// gdb output
int *p = (int *) malloc(sizeof(int)); // p = (int *) 0x602010
p = NULL; // p = (int *) 0x0
p = &a; // p = p = (int *) 0x7fffffffe15c
// it is possible to change what p points to
// after calling task()?
task(p);
// p will be NULL?
return 0;
}
task() 内で p が 0x0 に変更されないのはなぜですか?