C언어 포인터 2차 배열 동적할당 해제에서 문제가 발생합니다.

조회수 445회
#include stdio.h
#include stdlib.h

        unsigned int Node_size;
        float Mean_degree;
        int (*bin)[2] , i , j , k=0 , l=0;

        printf("Node size :?");
        scanf("%d",&Node_size);
        printf("Mean degree :?");
        scanf("%f",&Mean_degree);

        bin=(int(*)[2])malloc(sizeof(int)*Node_size*(Node_size-1));
        for(i=0;i<Node_size;i++){
                for(j=i+1;j<Node_size;j++){
                        bin[k][l]=i;
                        l++;
                        bin[k][l]=j;
                        l--;
                        k++;
                }
        }
        for (i=0;i<Node_size*(Node_size-1);i++){
                printf("%d  ",*(*(bin)++));

        }
            for(i=0;i<Node_size*(Node_size-1);i++){
                free(bin[i]);
        }
       free(bin);

bin[Node_size*(Node_size-1)][2] 를 동적할당하여 2차원 배열로 사용하였습니다.

처음에는 free(bin) 하나만 사용했다가 문제가 발생하여 free(bin[i])를 추가한 상태입니다.

그래도 문제가 발생하여 어느 부분에서 잘못된 코드를 사용하였는지 알고 싶습니다.

감사합니다.

1 답변

  • int (*bin)[2] ?
    

    괄호는 왜 한거에요? 보통

    int bin[][2]; 
    

    이렇게 선언해요

    int *bin[2];
    

    이렇던가

    그리고 메모리 할당을 각각 해줘야되요 2차원포인터라는게 각각 주소가 할당되야하는데 하나만 할당했네요

    for (i=0;i<Node_size*(Node_size-1);i++)
                bin[i]=(int*)malloc(sizeof(int));
    

    위와같이 할당해서 해보세요

    • 괄호가 있고 없고는 차이가 있는걸로 알고 있습니다.. 저는 메모리 할당을 크게 하나만 해서 나누는 방식을 사용하였습니다. 알 수 없는 사용자 2020.3.19 10:09

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)