C 언어 포인터에 대한 질문
2569 단어 C 언어
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct A{
int a;
char b;
};
struct B{
struct A *n;
};
struct B *new_B(){
struct A t = { 100, 'c'};
struct B *p;
p = (struct B *) malloc(sizeof(struct B));
p->n = &t;
return p;
}
int main(void) {
struct B *p;
p = new_B();
printf("%d, %c
", p->n->a, p->n->b);
free(p);
return 0;
}
함수 newB의 역할은 구조체 B의 바늘 변수 p를 새로 만들고 메모리를 분배한 다음에 함수에 구조체 A의 변수 t를 만들고 이 변수의 주소 & t를 B의 구성원 n(n은 구조체 A의 바늘)에게 부여하는 것이다.우리는 t가 국부 변수로 창고에 저장되고 함수 new 에 저장된다는 것을 안다B 집행이 끝나면 t는 석방된다.우리가 주 함수를 되돌려 출력하면 정확한 결과를 얻을 수 있다.만약 우리가 메모리를 분배하는 줄, 즉 p=(struct B*)malloc(sizeof(struct B))를 제거한다면;집행이 잘못될 것이다.
문제는 메모리를 분배해도 newB 함수가 실행된 후에 t는 방출됩니다. 그러면 주 함수에서 p->n에 접근하면 오류가 발생할 수 있습니다.왜 주 함수에서 접근할 수 있습니까?
큰 소가 해답을 가르쳐 주세요!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.