편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.09.02

    C 동적할당 어째서 free() 로 해제한 메모리를 수정하거나 접근할수 있는건가요?


    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int *pList = NULL, i = 0;
    
        pList = (int*)malloc(sizeof(int) * 3);
    
        pList[0] = 10;
        pList[1] = 20;
        pList[2] = 30;
    
        for(i=0; i <3; ++i) {
            printf("%d\n", pList[i]);
        }
    
        free(pList);
    
        printf('\n ********** \n');
    
        pList[0] = 10;
        pList[1] = 20;
        pList[2] = 30;
    
        for(i=0; i <3; ++i) {
            printf("%d\n", pList[i]);
        }
    
        return 0;
    }
    

    이번에 동적할당 공부하면서 궁금한게 생겼는데요.

    여기 free() 에서 동적할당을한 메모리를 해제해서 운영체제에 돌려준다고 설명이 나와있던데

    어떻게 해제한 후에도 그 값을 수정하거나 접근할수 있는건가요?

    해제했다면 아예 그값에 접근하지 못하거나 없어야 하지 않나요??

  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.09.02

    C 질문입니다! - 이번에 동적할당 배우는데.. 쉬우시겠지만 도와주세요 ㅠ


    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int *pList = NULL, i = 0;
    
        pList = (int*)malloc(sizeof(int) * 3);
    
        pList[0] = 10;
        pList[1] = 20;
        pList[2] = 30;
    
        for(i=0; i <3; ++i) {
            printf("%d\n", pList[i]);
        }
    
        free(pList);
    
        printf('\n ********** \n');
    
        pList[0] = 10;
        pList[1] = 20;
        pList[2] = 30;
    
        for(i=0; i <3; ++i) {
            printf("%d\n", pList[i]);
        }
    
        return 0;
    }
    

    이번에 동적할당 공부하면서 궁금한게 생겼는데요...

    여기 free() 에서 동적할당을한 메모리를 해제해서 운영체제에 돌려준다고 설명이 나와있던데

    어떻게 해제한 후에도 그 값을 수정하거나 접근할수 있는건가요?

    해제했다면 아예 그값에 접근하지 못하거나 없어야 하지 않나요??