2017-05-17 1 views
0

가 나는 아래의 프로그램을 가지고 컴파일이 성공하지만 실행하는 동안, 일식의 프로그램이 충돌이이해 포인터

struct Student 
{ 
    unsigned int *ptr; //Stores address of integer Variable 
}*s1; 

int main() 
{ 
    unsigned int roll = 20; 
    s1->ptr = &roll; 

    printf("\nRoll Number of Student : %d",*(s1->ptr)); 

    return(0); 
} 

롤 사용하여 포인터의 값을 인쇄하는 방법을 액세스하는 C에서 포인터 멤버를 참조 구조에

+1

(S1)가 –

답변

2

Student 구조를 만들고, 그것을 할당하고 난 그냥 포인터를 선언 할 것이

typedef struct Student 
{ 
    unsigned int *ptr; //Stores address of integer Variable 
} Student; 

int main() 
{ 
    Student *s1; 
    unsigned int roll = 20; 
    s1 = malloc(sizeof(Student)); 
    if (s1 == NULL) { 
     return -1; 
    } 
    s1->ptr = &roll; 

    printf("\nRoll Number of Student : %d",*(s1->ptr)); 
    free(s1); 

    return(0); 
} 
+0

을 할당되지 않은 사용 구조체를 통해 그것을 통해 * ptr 멤버에 액세스하려면 ... 여기 s1은 구조체이고 구조체에 대한 포인터가 아닙니다. 내가 맞습니까? – danny

+0

포인터를 원하면'malloc'을 사용하여 포인터를 할당해야합니다. 코드를 업데이트하겠습니다. –

+0

Orel에게 감사드립니다. 이 개념을 더 잘 이해하기 위해 malloc()을 사용하지 않고 * ptr member의 값을 할당 할 수 있습니까? .... 다른 방법은 문제의 언급 된 변수의 일부 주소로 구조체 멤버를 초기화 할 수 있습니까? – danny