GDB를 사용하여 크래시를 디버깅하는 동안 ASSERT()에서 프로그램이 충돌하는 것을 발견했습니다. 이상한 점은 포인터가 유효한 데이터를 가리키는 0x0을 포함한다는 것입니다.0x0이 유효한 데이터를 가리키는 이유
샘플 코드 : 나는 'X'올바른 주소를 가리키는 것을 알 수 있습니다
#define MAX_NUM 10;
...
...
assert(x->y != NULL);
assert(x->y->z < MAX_NUM); <-- Crashes here
. 내가 할 때 :
(gdb) print x
$16 = 0x841eda3
(gdb) print x->y
$17 = 0x0
(gdb) print *x->y
$18 = {
...
...
z = 1;
...
}
어떻게 가능합니까? GDB에서 "주소 0x0의 메모리를 액세스 할 수 없습니다"오류가 발생하지 않아야합니까?
데이터이지만 유효한 데이터인지 확인하십시오. – John3136
예, 'y'의 모든 입력란은 정상적으로 보입니다. – adizone
@aditya :'print * (x-> y)'를하면 어떻게 될까요?'print * x-> y'와'print (* x) -> y'와는 다른 결과를 줍니까? – Brendan