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
댓글 입력