공부/C & C++

[C 언어 / 자료구조] 연결 구조체

미친사람 2021. 12. 9. 20:56
반응형

 

#include <stdio.h>
#include <stdlib.h>

typedef struct _person {
	char name[20];
	int age;
	struct _person * next;
}Person;

int main(void) {

	Person * current = NULL;
	Person * first = NULL;
	Person * last = NULL;

	int input = 1;
	int i = 1;

	while (1) {
		printf("회원을 추가하시겠습니까? [0 : 아니오 / 1 : 네]: ");
		scanf("%d", &input);

		if (input == 0) {
			break;
		}

		Person * current = (Person*)calloc(1, sizeof(Person));
		// Person * current = (Person*)malloc(sizeof(Person));
		/*
			처음에 난 위에꺼로 했다가 안되는 이유를 알아보니
			메모리 할당된 부분에 쓰레기 값이 들어가서 NULL이 안먹힌것 
			 
			Person * current = (Person*)malloc(sizeof(Person));
			current->next = NULL;
	        
			이렇게 적어주는 방법도 있었다.... 왜 지금 생각이..
		*/
		 
		printf("%d번째 회원의 이름을 입력해주세요 : ", i);
		scanf("%s", current->name);
		printf("%d번째 회원의 나이를 입력해주세요 : ", i);
		scanf("%d", &current->age);

		if (first == NULL) {
			first = current;
		}
		else {
			last->next = current;
		}

		last = current;

		i++;
	}
	
	

	printf("\n== 전체 회원 리스트 ==\n");

	current = first;
	i = 1;

	while (1) {
		printf("%d 번째 회원 : [%s, %d세]\n", i, current->name, current->age);

		if (current->next == NULL) {
			break;
		}

		current = current->next;
		i++;
	}

	printf("\n== 메모리 반납 ==\n");

	current = first;
	i = 1;

	while (1) {
		printf("%d 번째 회원의 메모리를 반납합니다.\n", i);
		free(current);

		if (current->next == NULL) {
			printf("존재하는 메모리가 없습니다.");
			break;
		}

		current = current->next;
		i++;
	}


	return 0;
}

 

 

 

도움을 받아, 해결했다.

https://blog.naver.com/errorsoft666/221875718137

 

[C언어] C언어 메모리 동적 할당 및 초기화 :: calloc(), memset()

포인터 변수의 값에 메모리를 할당해 주는 함수로 malloc() 이라는 함수가 있었습니다. 하지만 이 malloc()...

blog.naver.com

 

이 사람 블로그에 설명이 잘 적혀있다, 보고 해결하면된다.

반응형