묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨홍정모의 따라하며 배우는 C언어
12.16 강의 realloc() 함수 질문입니다.
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 프로그래밍
스택 오버플로우 관련 질문입니다.
섹션 3 두번째 강의를 보면 스택의 크기는 보통 1MB로 설정되어 있고, 이 크기를 컴파일러 설정에서 10MB로 바꾸는걸 보여주셨는데요. 이 보통 1MB라는 스택의 크기는 운영체제 수준에서 설정된 값이 아닌가요? 어떻게 단지 컴파일러에서 값을 변경한 결과 비정상 작동하던 프로그램이 정상 작동하는 것인지 잘 이해가 되지 않습니다. 운영체제가 실행파일을 봤을 때 스택의 크기가 1MB가 아니라 달리 설정되어 있다면 그에 맞춰 실행을 하는 것인가요?
-
해결됨C 프로그래밍 - 입문부터 게임 개발까지
6-4(배열 파트 '문자 vs 문자열') sizeof 예제 다르게 출력되는 분들 참고하세요.
간혹 "나도코딩"의 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언어
2차원 배열에서 arr[0]+1 과 &arr[0]+1 의 차이
#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언어
포인터를 배열처럼 사용
안녕하세요! 포인터를 배열처럼 사용하는 원리가 이해가 가지 않아 문의 드립니다. 아래의 스크린샷을 봐주시면 감사하겠습니다!!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언어
포인터 2차원 배열
안녕하세요 포인터 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언어
2.8 키워드와 예약어 질문
안녕하세요. 강의를 듣고 키워드와 예약어 개념이 조금 헷갈려서 질문 드립니다.키워드는 문법을 구분하기 위해 사용되는 단어이고, 예약어는 말 그대로 프로그래밍 언어가 문법에 사용하려고 예약해둔 단어들로 알고 있습니다.그렇다면 헤더가 없어도 문법적으로 사용되는 단어들은 키워드에 포함되고, 헤더가 없으면 변수 혹은 함수의 이름으로 쓸 수 있으나 include 하는 순간 이름으로 쓸 수 없는 단어들을 예약어로 보는 건가요? 아니면 전자, 후자 모두 키워드이자 예약어인지 궁금합니다. 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
강의자료 질문
혹시 ppt 강의자료는 따로 제공받을 수 없나요??
-
미해결정혜경 판타스틱 자료구조 in C
음...
addfirst 랑 addlast 를 왜 나누는지 이해가 안됩니다.addlast 코드만 있어도 추가하는데는 문제가 없어보이는데...
-
해결됨홍정모의 따라하며 배우는 C언어
예제 질문입니다
교수님 예제에서 print_binary 함수를 만드실때 remainder 라는 변수를 쓰셨는데다른 변수를 쓰지 않고 파라미터에서(?) 받아온 num 변수만을 사용해 밑에처럼 짜면 문제가 생기나요?
-
미해결홍정모의 따라하며 배우는 C언어
[5.1 반복 루프] goto문 결과 질문
5.1 강의의 6:11초쯤에서 goto문의 출력 결과로 1~9까지만 나오고 10은 안 나왔는데 나중에 설명한다고 하셨는데 설명을 안 하셔서 질문 남깁니다.교수님이 작성하신 코드에서는 n이 10일 때 printf를 안 하고 바로 goto out;이 실행되기 때문에 결과가 9까지 출력되는 것 맞나요?goto문으로 1~10까지 출력되는 반복문을 만들려면 n == 10이 아니라 n == 11로 써야하는 것 맞을까요?
-
해결됨독하게 되새기는 C 프로그래밍
부동소수점 비교
안녕하세요! 부동소수점 비교 관련 질문이 있습니다.그간 부동 소수점(float 및 double) 비교 시 아무 생각없이 썼는데요;; 표현 범위를 넘어갔을 때 숫자가 보장이 안되어서 == 연산 오류가 있는것은 이해 하였는데요두 수의 작고 큰지 (<,>)에 대한 비교에 대해서는 오차가 없는 것 인지 궁금합니다. 감사합니다!
-
해결됨홍정모의 따라하며 배우는 C언어
continue의 용도
이번 예제의 count 함수와 get_first_char함수에 사용된 continue; 들은 어떤 의미를 가지나요??7.10 강의에서 말씀하신 '세미콜론만 있으면 잘 안보이기때문에 단지 눈에 잘 보이기 위한' 용도인가요?
-
해결됨홍정모의 따라하며 배우는 C언어
sizeof operator malloc
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언어
4.7 %f, %g, %% 질문
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언어
scanf에 녹색줄 없애기
안녕하세요 이전까지 강의 들을때는 scanf에 녹색줄이 뜨지 않았는데요, 이번에 비주얼 스튜디오를 새로 깔고 나니 계속 scanf에 녹색줄이 뜨면서 " 반환값이 무시되었습니다." 메세지가 뜨네요. 실행은 잘 되지만 계속 거슬려서, 해결할 수 있는 방법이 있을까요? ㅠㅠ
-
해결됨CUDA 프로그래밍 (6) - C/C++/GPU 병렬 컴퓨팅 - 서치 & 소트
예제를 돌려보고 싶은데 common.cpp은 어디에 있을까요?
알려주시면 감사하겠습니다!
-
미해결홍정모의 따라하며 배우는 C언어
마지막 custom input function 예제에서 버퍼비우기 코드의 역할이 궁금합니다
#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언어
23:30 질문입니다
char heart[] = "I love Kelly!"; char* head = "I love Kelly!"; head = heart; //Ok heart = head; // Errorhead = heart; //Okheart = head; // Error선생님 전자는 되고, 후자는 안되는 이유가 뭐죠?생각보다 포인터와 배열의 차이를 알듯하면서도 계속 헷갈려서 스스로가 너무 답답해요ㅠㅠ
-
해결됨독하게 되새기는 C 프로그래밍
dll의 메모리 구조는 어떻게 되나요?
안녕하세요 수업 잘 듣고 있습니다. 양질의 수업 감사합니다.수업 내용중 dll에 관해 질문이 있습니다. lib형태의 라이브러리는 실행파일에 같이 묶이기 때문에 실행파일의 메모리구조(힙,스텍,데이터등)를 참조할 것이라 생각합니다. dll의 경우 하나의 라이브러리를 여러 프로세스에서 가져와서 사용하는 형태인데 이경우 각 프로세스 마다 dll을 위한 메모리가 할당되는것인지 아니면 dll을 위한 메모리 공간이 할당되고 그것을 공유해서 사용하게 되는것인지 궁금합니다. (혹 잘못 이해하고 있으면 지도 부탁드립니다.)