inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

12.16 강의 realloc() 함수 질문입니다.

해결됨

홍정모의 따라하며 배우는 C언어

12.16 강의 realloc() 함수 질문입니다. int n = 10; int* ptr = (int*)calloc(n , siezof(int)); n = 20; int* ptr2 = (int*)realloc(ptr, n * sizeof(int)); 위와 같이 realloc() 함수를 이용해 메모리를 할당받으면 자동으로 calloc으로 할당 받은 메모리는 할당이 해제 되는 건가요? 디버거 이용해서 보면 프로그램이 끝날 때 까지 calloc으로 할당받는 메모리는 해제가 되지 않고 메모리 누수가 발생하는거 같은데 해제가 되지 않는게 맞나요?

  • c
빵과병아리 댓글 1 좋아요 1 조회수 446

스택 오버플로우 관련 질문입니다.

해결됨

독하게 되새기는 C 프로그래밍

섹션 3 두번째 강의를 보면 스택의 크기는 보통 1MB로 설정되어 있고, 이 크기를 컴파일러 설정에서 10MB로 바꾸는걸 보여주셨는데요. 이 보통 1MB라는 스택의 크기는 운영체제 수준에서 설정된 값이 아닌가요? 어떻게 단지 컴파일러에서 값을 변경한 결과 비정상 작동하던 프로그램이 정상 작동하는 것인지 잘 이해가 되지 않습니다. 운영체제가 실행파일을 봤을 때 스택의 크기가 1MB가 아니라 달리 설정되어 있다면 그에 맞춰 실행을 하는 것인가요?

  • c
  • kernel
  • secure-coding
loyalswallow 댓글 1 좋아요 1 조회수 367

6-4(배열 파트 '문자 vs 문자열') sizeof 예제 다르게 출력되는 분들 참고하세요.

해결됨

C 프로그래밍 - 입문부터 게임 개발까지

간혹 "나도코딩"의 sizeof 값이 13으로 나오는 분들이 있습니다. 저도 그랬습니다. 해당 내용은 Encoding 방식의 차이 때문에 일어난 일입니다. 즉, 한글을 컴퓨터에 어떻게 저장할 것이냐의 차이인데, EUC-KR 혹은 CP949 방식으로는 나도코딩님처럼 한 글자가 2 byte를 차지하여 저장되지만, UTF-8 환경에서는 3 byte를 차지하게 되어 sizeof가 예제와 다르게 나오는 것입니다. "만일"이라는 단어를 예시로 EUC-KR 환경이라면 sizeof가 5, UTF-8 환경이라면 sizeof가 7이 나오면 정상입니다. 즉 EUC-KR에서는 (2*n+1), UTF-8에서는 (3*n+1)의 값이 나오면 예제가 정상적으로 수행된 것입니다. 저는 VSCode에서 실행하고 있는데 하단 오른쪽에 Encoding 방식을 설정할 수 있게 되어 있습니다. 수업에서 쓰는 에디터에서도 설정이 가능할 것 같은데, 확인해보지는 않았습니다.

  • c
  • sizeof
  • encoding
  • utf-8
  • euc-kr
작은새 댓글 0 좋아요 1 조회수 436

2차원 배열에서 arr[0]+1 과 &arr[0]+1 의 차이

미해결

홍정모의 따라하며 배우는 C언어

#include <stdio.h> int main() { float arr2d[2][4] = { {1.0f,2.0f,3.0f,4.0f},{5.0f,6.0f,7.0f,8.0f} }; printf("%f, %f\n", *(arr2d[0] + 1), **(&arr2d[0] + 1)); printf("%llu, %llu", (unsigned long long)(arr2d[0] + 1), (unsigned long long) ( & arr2d[0] + 1)); // 12 차이 } 위의 예제에서 arr2d[0]+1은 arr2d[0][1]의 주소이고, &arr2d[0]+1은 arr2d[1][0]의 주소라고 나오는데요 그냥 c언어의 문법이 그런 것인지, 아니면 어떤 이유가 있는 것인지가 궁금합니다. 또한, 위의 예제에서 [0][1]번째의 값인 2.0과 [1][0]번째의 값인 5.0을 출력하고자 할때, 후자의 경우에만 indirection을 두번 해줘야 하는 이유가 알고 싶습니다.

  • c
현정 댓글 1 좋아요 1 조회수 546

포인터를 배열처럼 사용

미해결

홍정모의 따라하며 배우는 C언어

안녕하세요! 포인터를 배열처럼 사용하는 원리가 이해가 가지 않아 문의 드립니다. 아래의 스크린샷을 봐주시면 감사하겠습니다!! double* pd = arr2;는 포인터 변수 pd에 arr2[0]의 주소 즉, &arr2[0]을 넣어주는 것이라고 생각합니다. 그래서 pd로 pd가 가지고 있는 주소값으로 그 주소가 가리키는 공간에 접근해 *pd = 3.0처럼 arr2[0] 공간의 값을 수정해주는 것은 이해가 갑니다. 하지만 pd[2] = 1024와 같이 포인터에 배열을 쓰는 것이 이해가 가지 않습니다. pd 자체는 포인터 변수이며 단순히 &arr2[0]을 가지고 있을 뿐인데 어떻게 pd 자체가 arr2처럼 배열로 동일시가 되나요?? pd[2]는 pd+2와 같은 역할을 하는 것인가요? 만약 그렇다면 arr2[0]이라는 주소값에 포인터 연산을 해 2만큼의 인덱스를 이동해 arr2[2]에 도달했다고 봐도 되나요??

  • c
jiwon6760 댓글 1 좋아요 2 조회수 477

포인터 2차원 배열

미해결

홍정모의 따라하며 배우는 C언어

안녕하세요 포인터 2차원 배열 9분 대부터 다시 공부하다가 이해가 가지 않아 문의드립니다. 위의 코드에서 *(*(parr + j) + i));와 (parr[j] + i);가 헷갈립니다. 일단 제가 처음에 이해한 대로 설명드려보겠습니다. parr은 parr[0]을 가리키는 포인터이며 즉 이 포인터가 최종적으로 가리키는 공간은 &arr0[0] 즉 arr 배열의 첫번째 공간입니다. 이 상태에서 예를 들어 parr + 1을 하면 &arr0[1]로 이동하며 를 하면 그 값은 2 이런 식이라고 생각했습니다. 또한 parr[1] + 1에서 parr[1]은 포인터이며 이 포인터가 가리키는 공간은 &arr1[0]이며 이 상태에서 포인터 연산 +1을 해주면 &arr1[1]이고 이를 로 접근하면 그 값은 5로 이해했습니다. 그치만 실제 결과를 보면 위에서 제가 제시한 두 코드의 결과는 같아야 되더군요. 그렇다면 그 결과를 도출하기 위해 다시 *(*(parr + j) + i));를 설명드리겠습니다. parr 배열 이름 자체는 &parr[0]이며 이 상태에서 포인터 연산 + 1을 하면 &parr[0] = &arr0[0], &parr[0] + 1 = &arr0[1]이 아니라 &parr[0] + 1 = &parr[1]이며 이 상태에서 로 접근하면 그 값은 4, 4+1은 5이며 이를 *로 간접 접근하면..이런 식인데 어디부터 제 개념이해가 잘못됐는지 모르겠습니다.. parr[1]로 먼저 arr1[0]에 접근한 뒤 포인터 연산 +1을 하는 것과 parr 자체에서 포인터 연산 +1을 하면 결과가 정확히 어떻게 다르며 *(*(parr + j) + i)) 이 코드의 정확한 개념이 궁금합니다.

  • c
jiwon6760 댓글 1 좋아요 3 조회수 839

2.8 키워드와 예약어 질문

해결됨

홍정모의 따라하며 배우는 C언어

안녕하세요. 강의를 듣고 키워드와 예약어 개념이 조금 헷갈려서 질문 드립니다. 키워드는 문법을 구분하기 위해 사용되는 단어이고, 예약어는 말 그대로 프로그래밍 언어가 문법에 사용하려고 예약해둔 단어들로 알고 있습니다. 그렇다면 헤더가 없어도 문법적으로 사용되는 단어들은 키워드에 포함되고, 헤더가 없으면 변수 혹은 함수의 이름으로 쓸 수 있으나 include 하는 순간 이름으로 쓸 수 없는 단어들을 예약어로 보는 건가요? 아니면 전자, 후자 모두 키워드이자 예약어인지 궁금합니다. 감사합니다.

  • c
이재완 댓글 1 좋아요 1 조회수 459

강의자료 질문

미해결

홍정모의 따라하며 배우는 C언어

혹시 ppt 강의자료는 따로 제공받을 수 없나요??

  • c
noahsway(김정호) 댓글 1 좋아요 2 조회수 726

음...

미해결

정혜경 판타스틱 자료구조 in C

addfirst 랑 addlast 를 왜 나누는지 이해가 안됩니다. addlast 코드만 있어도 추가하는데는 문제가 없어보이는데...

  • c
gwisej68 댓글 1 좋아요 0 조회수 435

예제 질문입니다

해결됨

홍정모의 따라하며 배우는 C언어

교수님 예제에서 print_binary 함수 를 만드실때 remainder 라는 변수 를 쓰셨는데 다른 변수를 쓰지 않고 파라미터에서(?) 받아온 num 변수만을 사용해 밑에처럼 짜면 문제가 생기나요?

  • c
댓글 1 좋아요 2 조회수 516

[5.1 반복 루프] goto문 결과 질문

미해결

홍정모의 따라하며 배우는 C언어

5.1 강의의 6:11초쯤에서 goto문의 출력 결과로 1~9까지만 나오고 10은 안 나왔는데 나중에 설명한다고 하셨는데 설명을 안 하셔서 질문 남깁니다. 교수님이 작성하신 코드에서는 n이 10일 때 printf를 안 하고 바로 goto out;이 실행되기 때문에 결과가 9까지 출력되는 것 맞나요? goto문으로 1~10까지 출력되는 반복문을 만들려면 n == 10이 아니라 n == 11로 써야하는 것 맞을까요?

  • c
sara0099 댓글 1 좋아요 1 조회수 337

부동소수점 비교

해결됨

독하게 되새기는 C 프로그래밍

안녕하세요! 부동소수점 비교 관련 질문이 있습니다. 그간 부동 소수점(float 및 double) 비교 시 아무 생각없이 썼는데요;; 표현 범위를 넘어갔을 때 숫자가 보장이 안되어서 == 연산 오류가 있는것은 이해 하였는데요 두 수의 작고 큰지 (<,>)에 대한 비교에 대해서는 오차가 없는 것 인지 궁금합니다. 감사합니다!

  • c
  • kernel
  • secure-coding
보노보노 댓글 2 좋아요 0 조회수 522

continue의 용도

해결됨

홍정모의 따라하며 배우는 C언어

이번 예제의 count 함수와 get_first_char 함수에 사용된 continue; 들은 어떤 의미를 가지나요?? 7.10 강의 에서 말씀하신 '세미콜론만 있으면 잘 안보이기때문에 단지 눈에 잘 보이기 위한' 용도인가요?

  • c
댓글 1 좋아요 2 조회수 288

sizeof operator malloc

해결됨

홍정모의 따라하며 배우는 C언어

4.2강 10:26 부분에서 int* int_ptr = NULL; int_ptr = (int*)malloc(sizeof(int) * 30); 위와같은 코드를 printf("size of pointer %zu bytes\n", sizeof(int_ptr)); 이렇게 실행했더니 결과값이 malloc을 지우나 안지우나 8이 나오는데 이것또한 운영체제의 32인지 64인지에 따라 다른건가요?

  • c
홍진기 댓글 1 좋아요 1 조회수 387

4.7 %f, %g, %% 질문

미해결

홍정모의 따라하며 배우는 C언어

printf("%f %f %lf\n", 3.141592f, d, d); 의 결과로 3.141593 이 출력되던데 왜 3.141592가 아니라 갑자기 3.141593이 출력되는 건가요? printf("%g %g\n", 123456.789, 1234567.89); 의 결과로 123456이 아니라 123457 이 출력되는 이유가 무엇인가요? %g 라는 게 정확히 어떤 건지 궁금합니다 강의 코드의 주석에 printf("%%\n", d); // Note the warning. d is ignored. 라고 적혀져 있던데 warning이 발생하는 이유는 무엇이고 d가 무시된다는 것은 무엇인가요? 이 주석에 대해서도 설명해주시면 감사하겠습니다

  • c
sara0099 댓글 1 좋아요 1 조회수 505

scanf에 녹색줄 없애기

미해결

홍정모의 따라하며 배우는 C언어

안녕하세요 이전까지 강의 들을때는 scanf에 녹색줄이 뜨지 않았는데요, 이번에 비주얼 스튜디오를 새로 깔고 나니 계속 scanf에 녹색줄이 뜨면서 " 반환값이 무시되었습니다." 메세지가 뜨네요. 실행은 잘 되지만 계속 거슬려서, 해결할 수 있는 방법이 있을까요? ㅠㅠ

  • c
gns 댓글 1 좋아요 1 조회수 1736

마지막 custom input function 예제에서 버퍼비우기 코드의 역할이 궁금합니다

미해결

홍정모의 따라하며 배우는 C언어

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define STRLEN 81 char* custom_string_input(char* st, int n); int main() { char word[11]; puts(custom_string_input(word, 11)); return 0; } char* custom_string_input(char* st, int n) { char* ret_ptr; int i = 0; char ch; ret_ptr = fgets(st, n, stdin); if (ret_ptr) { while (st[i] != '\n' && st[i] != '\0') i++; if (st[i] == '\n') st[i] = '\0'; //else // while ((ch = getchar()) != '\n') // clear buffer // continue; } return ret_ptr; } 1.위의 코드에서 버퍼 비우기 코드 else 부분을 주석 처리하고 실행해도, 버퍼에 남아있는 문자들이 결과에 영향을 주지 않는 것 같은데요 (재실행해도 이전 버퍼에 영향을 받지 않는 것 같고요) 버퍼 지우기 코드가 있어야 할 이유가 있나요? 안정성을 위한 부분일까요? 2.버퍼를 디버거의 memory로 확인하는 방법이 있을까요? 버퍼에 대해 헷갈릴 때 직접 디버거로 찍어보고 싶은데, 방법을 모르겠어요 3.gets()함수에 대해 설명하실때, gets() reads one line and removes \n and add \0 라고 하셨는데, 여기서 \n을 지운다는게 버퍼에서 지운다는 얘기일까요?

  • c
현정 댓글 1 좋아요 1 조회수 548

23:30 질문입니다

미해결

홍정모의 따라하며 배우는 C언어

char heart[] = "I love Kelly!"; char* head = "I love Kelly!"; head = heart; //Ok heart = head; // Error head = heart; //Ok heart = head; // Error 선생님 전자는 되고, 후자는 안되는 이유가 뭐죠? 생각보다 포인터와 배열의 차이를 알듯하면서도 계속 헷갈려서 스스로가 너무 답답해요ㅠㅠ

  • c
현정 댓글 1 좋아요 1 조회수 328

dll의 메모리 구조는 어떻게 되나요?

해결됨

독하게 되새기는 C 프로그래밍

안녕하세요 수업 잘 듣고 있습니다. 양질의 수업 감사합니다. 수업 내용중 dll에 관해 질문이 있습니다. lib형태의 라이브러리는 실행파일에 같이 묶이기 때문에 실행파일의 메모리구조(힙,스텍,데이터등)를 참조할 것이라 생각합니다. dll의 경우 하나의 라이브러리를 여러 프로세스에서 가져와서 사용하는 형태인데 이경우 각 프로세스 마다 dll을 위한 메모리가 할당되는것인지 아니면 dll을 위한 메모리 공간이 할당되고 그것을 공유해서 사용하게 되는것인지 궁금합니다. (혹 잘못 이해하고 있으면 지도 부탁드립니다.)

  • c
고대괴물 댓글 1 좋아요 1 조회수 1159

인기 태그

인프런 TOP Writers

주간 인기글