C로 배우는 자료구조 및 여러가지 예제 실습

C로 배우는 자료구조 및 여러가지 예제 실습

(21개의 수강평)

5528명의 수강생
C자료구조
무료
지식공유자 · 권오흠
49회 수업· 총 24시간 18분수업
평생 무제한 시청
수료증 미발급 강의
수강 난이도 초급
이성준 프로필

realloc함수 쓰지 않는이유 이성준 3달 전
realloc함수로 메모리를 재할당하지않고 reallocate함수를 따로 만드는이유가 뭔가요?

0
BWYWB 00 프로필

안녕하세요 교수님. free()관련해서 질문 있습니다. BWYWB 00 2019.06.28
안녕하십니까. 이렇게 좋은 강의 무료로 공부할 수 있게 해주셔서 너무 감사합니다.  이번 강의에서 궁금한 부분은 유저 함수 `remove()`에 대한 부분입니다. 중간에 `strdpu()`의 내부구조는 이와 비슷하다고 하시면서 보여주신 코드에는 `malloc()`함수를 사용해서 메모리를 동적으로 할당 받는다는 것을 알았습니다. 이번 강의의 `remove()` 함수를 보면 삭제할 요소에 마지막 요소의 주소 값을 넣는 것을 보았는데 이 경우에 heap 영역에 남아있는 유저의 데이터를 free()를 사용하여 할당 해제하고 싶습니다. 이런 경우에는 주소값을 대입하기 이전에 삭제할 요소의 두 주소값을 free()에 넣어주면 되는걸까요?

0
보경공 프로필

동적으로 할당된 메모리의 life time 관련하여 질문 있습니다. 보경공 2019.01.11
동적으로 할당된 메모리는 free()함수를 호출하지 않는 이상, 계속 유지된다고 하셨는데요.프로그램이 끝나고도 계속 유지되는 건지, 프로그램이 종료되면 전역 변수처럼 소멸되는 건지 궁금합니다.

0
류성윤 프로필

Node에 대한 코드 안에 링크필드 선언할 때 류성윤 2018.10.19
struct node next와 struct node prev로 쓰셨는데 저것을 포인터 형으로 적어야 하는 것 아닌가요??포인터형이 아니라면 컴파일이 안되지만 만약에 된다면 저대로 구조체 안에 다른 구조체가 메모리 할당 된다고 볼 수 있나요?

0
whazzulookinat 프로필

stack 구현에서 동적할당중 형변환의 유무에 관한 질문 whazzulookinat 2018.08.18
안녕하세요, 강의 잘 수강하고 있습니다. 다름이 아니라, array를 이용한 stack의 create()함수에서는 Stack s = (Stack)malloc(sizeof(struct stack_type))을 썼는데, linked list를 이용한 stack의 create()함수에서는, malloc 앞에 (Stack)가 빠져있습니다. 혹시, 형변환을 하지 않아도 되는 특별한 이유라도 있는건가요??

0
박성진 프로필

find함수가 제대로 작동을 안합니다 박성진 2018.11.28
Node find_item(char item) {Node *temp = head;while (temp!=NULL) { if (strcmp(temp->data, item) == 0) { return temp; } else { temp = temp->next; }}}이렇게 쓰고 메인 함수에Node head = (Node )malloc(sizeof(Node));head->data = "monday";head->next = head;Node *tem=find_item("monday");printf("%s", tem->data);이런 식으로써넣었는데 아무것도 안나오더라구요 왜그럴까요 그리고 왜 함수들을 void형식이 아닌 Node 형식으로 만드나요?

1
JJ 프로필

3강 문자열에 등장하는 코드에 관한 질문입니다. JJ 2018.07.07
```/ strdup이 비표준이라 같은 기능을 하는 코드를 main내에 직접 삽입하였습니다. /include include int main() {int i=0;char *words[100];char buf[100];while(i<4 && scanf("%s", buf)!=EOF) { char * tmp=(char *)calloc(strlen(buf)+1, sizeof(char)); /* 1 */ if(tmp!=NULL) { strcpy(tmp, buf); words[i++]=tmp; }}for(i=0 ; i<4 ; ++i) { printf("%s\n", words[i]);/* 2 */return;}```저는 위 코드를 다음과 같이 이해했습니다. 즉, <tmp 포인터는 블록안에서 선언되었기 때문에 while문을 빠져나오면 words[n]의 각 첫바이트의 메모리 주소를 저장한 tmp안의 주소값은 생성과 소멸을 반복하다 마지막에 자동 소멸되나, 각각의 words[n]에 담긴 문자열은 소멸되지 않는다. 또한, 원하는 결과를 다 얻고 나서 calloc에 의해 생성된 메모리를 만일 소거하고 싶다면,위 '2' 자리에for(i=0 ; i<4 ; ++i) {free(words[i]);를 삽입하면 된다.>위와 같이 해석하는 것이 맞는지 확인해 주시면 고맙겠습니다. 덧붙임> 좋은 강의 올려 주셔서 고맙습니다. 남은 파트도 열심히 잘 들을께요^^

0
InSpirit 프로필

컴파일 실행 중에 오류가 났는데, 구글링으로도 해결방법을 모르겠어서 남깁니다. InSpirit 2018.06.22
에디터는 VSCode 쓰고 있습니다. 컴파일 실행할 때 C:UsersUserAppDataLocalTempcc6TaPRa.o:14_3_main.cpp:(.text+0x47): undefined reference to read_line(_iobuf*, char*, int)' C:\Users\User\AppData\Local\Temp\cc6TaPRa.o:14_3_main.cpp:(.text+0xf6): undefined reference toread_line(_iobuf, char, int)' C:UsersUserAppDataLocalTempcc6TaPRa.o:14_3_main.cpp:(.text+0x13b): undefined reference to read_line(_iobuf*, char*, int)' C:\Users\User\AppData\Local\Temp\cc6TaPRa.o:14_3_main.cpp:(.text+0x180): undefined reference toread_line(_iobuf, char, int)' collect2.exe: error: ld returned 1 exit status string_tools.h에 정의한 read_line함수를 읽지 못하는 것 같은데, 이유를 모르겠습니다

0
깜비 프로필

21분23초 char **tmp1에서 캐스팅을 해주는 이유는 무엇인가요? 깜비 2018.09.11
char tmp1 = (char )malloc(capacitysizeof(char )); 에서 (char )로 캐스팅을 해주는 이유가 무엇인가요?C언어 기초와 병행하며 강의를 듣는 중이라 잘 이해가 되질 않네요! 도와주세요!

2
K MJ 프로필

전화번호부 v 1. 0 버전 질문입니다. K MJ 2018.03.19
include include define CAPACITY 100 define BUFFER_SIZE 20 char *names[CAPACITY]; char *numbers[CAPACITY]; int n = 0; void add(); void find(); void status(); void remov(); int main(){ char command[BUFFER_SIZE]; while(1){ printf("$"); scanf("%s", command); if(strcmp(command, "add") == 0) add(); else if(strcmp(command, "find") == 0) find(); else if(strcmp(command, "status") == 0) status(); else if(strcmp(command, "remov") == 0) remov(); else if(strcmp(command, "exit") == 0) break; } } void add(){ char buf1[BUFFER_SIZE]; char buf2[BUFFER_SIZE]; scanf("%s", buf1); scanf("%s", buf2); names[n] = strdup(buf1); // names[n]과 numbers[n] 모두 strcpy로 받으면 buf1, 2가 사라지면서 shallow copy가 됨. numbers[n] = strdup(buf2); n++; printf("%s was added successfully. \n", buf1); } void find(){ char buf1[BUFFER_SIZE]; scanf("%s", buf1); int i; for(i = 0; i < n; i++){ if(strcmp(buf1, names[i]) == 0){ printf("%s\n", numbers[i]); return; } printf("no person named %s exist", buf1); } } void status(){ int i; for(i = 0; i < n; i++){ printf("%s %s\n", names[i], numbers[i]); } printf("Total : %d", n); } void remov(){ char buf1[BUFFER_SIZE]; scanf("%s", buf1); int i; int index; for(i = 0; i < n; i++){ if(strcmp(buf1, names[i]) == 0){ // 같은 이름 하나라는 가정하에 index = i; printf("%s %s", names[index], numbers[index]); names[index] = names[n-1]; numbers[index] = numbers[n-1]; n--; return; } printf("no person named %s exist", buf1); } } add함수만 정상적으로 출력되고 다른 함수들은 전부 런타임에러가 납니다. 한번 여러가지 경우를 돌려보니까 names[1]은 (null)으로 출력되는데 names[0]을 하면 런타임에러가 나네요 이유가 무엇인가요??

0
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스