struct a {
int *val;
};
void main(){
int n;
struct a *a1;
a1= malloc(sizeof(a1));
n=10;
a1->val = &n;
func(a1);
printf("After changing %d\n",a1->val);
}
void func(struct a *a2){
int a = 5;
a2->val = &a;
a2->val = 0 ;
}
할당 된 로컬 변수를 멤버 구조체 포인터에 할당합니다. 그리고 결국 그것을 null로 만든다. null 포인터를주는 대신 액세스하려고하면 0을줍니다.구조체의 멤버 포인터에 로컬 변수의 주소가 할당됩니다.
이렇게 소리 치지 않는 한'void main()'을 사용하지 마십시오. –
'NULL'은 기술적으로 '0'입니다. 또한 포인터를 NULL로 설정하지 않고 예제에서 '19'로 설정합니다. –
"마침내 null이 됨"이없고 "a2-> val = 19;"문은 컴파일 타임 오류가 발생합니다. 정말로 묻는 코드를 게시해야합니다. 귀하의 질문에 정말 변수의 수명이 만료 된 후에 포인터를 통해 변수에 액세스하려고 시도하는 정의되지 않은 동작에 대한 것 같습니다. –