방금 C 학습을 다시 시작했지만 실제로 일부 메모리 관리 세부 정보와 혼동합니다. 나는 아래의 코드 트랩C malloc 오류 구조 해제
중단 ... 해제되지
포인터가 할당되지 않은 얻고있다. 정말로은 malloc 당 1 개의 무료가 필요합니까? 왜 내 코드가 잘못 되었나요?
감사합니다.#define N 9 typedef struct { int MAX_LIST_SIZE; int length; int *ini; }List; /* allocates new List and its data */ List *newList(int size) { List *list = malloc(sizeof(List)); list->MAX_LIST_SIZE = size; list->length = 0; list->ini = malloc(sizeof(int) * size); return list; } /* add some value to the list */ void addList(List *list, int val) { if (list->length < list->MAX_LIST_SIZE) list->ini[list->length++] = val; else fprintf(stderr, "Error: add(): List is full.\n"); } /* get an array of N*N lists malloc-ed Lists */ List *gridList() { int i, j; List *cells = malloc(sizeof(List) * N * N); for (i = 0; i < N * N; i++) { /* malloc is called inside NewList()*/ cells[i] = *newList(N); for (j = 0; j < N; j++) addList(&cells[i], j + 1); } return cells; } /* inside main */ List *cells = gridList(); /* use cells ... */ /* free */ for (i = 0; i < N * N; i++) { free(cells[i].ini); /* line below causes CRASH */ free(&cells[i]); }
1) 코드) 2 '완료'일 필요는 없습니다 :
마지막에 무료로 문을 변경? 3) Java가 있습니다. – Fernando
C는 훌륭한 언어입니다. 그러나 작고 완전한 @ compileable example에 대한 @ Beta의 요점은 우수합니다. 당신이 충고를 따르면 대답을 얻을 가능성이 더 큽니다. – Gene
@ 베타 : 1 점과 2 점이 매우 좋습니다. 포인트 3은 언어 전쟁의 장소가 아닙니다. –