묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결오픈소스 자료구조 및 알고리즘 in C
tail노드의 이유 & 메모리 풀링 관련
메모리 풀링은 그렇다면 주로 어느정도의 사이즈를 가정할 수 있을때나 시스템상 핸들링 할 수 있는 최대치를 넣어 구현한다는 말씀이신가요?그렇다면 내부적으로 너무 많은 메모리를 사용하지않고 낭비되어 효율성이 떨어지지 않나요? 어느 시점에 써야 하는지에 대한 부분이 좀 명확하지않아, 어떤 상황에 써야 되는 기법인지 묻고 싶습니다. 2번째는 현 tail 노드를 추가하는 부분에 있어서 .... 왜 마지막 노드의 next가 NULL인것에서 문제가 생기는 지 이해가 잘 되지 않습니다.for문이나 while문으로 loop하여 display하는것으로 가정했을때 마지막 노드 next가 0이게 되면 더이상 반복문이 실행되지않고 끝나게 되면서, NULL이 프린트 되지않고 나오지않나요?예시로 for문 중간에 왜 아무것도 기입하지 않는 부분도 어떻게 컴파일은 진행이되고 세크먼트로폴트 결과가 나오는걸까요? 혹시 선생님 말씀은 null로 마지막 node가 설정되지 않은 쓰레기값이 설정되었을때를 방지하기위해 tail노드를 추가적으로 안전하게 설치하자는 말씀이실까요?
-
해결됨윤파고의 정보처리기사 DB/프로그래밍 All-In-One
12번 강의 영상이 너무 별로에요...
안녕하세요?모든 강의 다 듣고, 한 강의만 못 듣고 있는데요. 12. DB 기출입니다. 영상을 아무리 이렇게 봐도 저렇게 보고, 해상도를 720으로 최고로 높여 보아도 흐려서 문제를 볼 수도 없습니다. 화질이 너무 심한데, 해상도 해결할 방법이 전혀 없나요? 이미지 추가 합니다.. 이거 문제 보라고 올려 주신건지요...?
-
해결됨독하게 시작하는 C 프로그래밍
malloc 함수의 형변환(?) 질문드립니다!
(int*)malloc( sizeof(int) * 4 )(char*)malloc( sizeof(char) * 4 )와 같이 malloc 함수 선두에 등장하는 (자료형*)은 무엇을 의미하고 어떻게 작동하는 것인지 알고 싶습니다! 항상 좋은 강의 감사드립니다!
-
미해결홍정모의 따라하며 배우는 C언어
4분 10초대 질문
&arr[0]과 그 앞의 것들이 모두 arr의 첫번째 원소의 주소를 가리켜서 동일한 것은 이해를 했는데 왜 &a[0][0]과 같은지를 모르겠습니다. 이중배열이면 첫번째 주소를 가리키는 포인터의 주소를 다시 포인터로 가리키는 것인가요?
-
미해결홍정모의 따라하며 배우는 C언어
숫자의 배열 비트 바이트
숫자의 배열에서 10개의 배열이 있으니 40바이트라고 말씀하셨는데, 1바이트 = 8비트 이므로, 10개의 칸이 있으므로 10바이트 = 80비트가 되는게 아닌가요?
-
미해결오픈소스 자료구조 및 알고리즘 in C
커널 버전
안녕하세요. 좋은 강의 정말 감사드립니다 😋 강의에서 분석하는 커널 버전이 3.10.X(on Jul 1, 2013(https://github.com/torvalds/linux/releases/tag/v3.10)) 으로 한 이유가 있으신지 궁금합니다. 최신 버전은 6.9.X 과는 시간 간극이 꽤 큰 것 같습니다. 강의 17:00 에서의 리눅스 소스코드 버전을 보면 3.10.X(https://github.com/torvalds/linux/blob/v3.10/lib/sort.c) 에서의 generic_swap 함수를 띄어왔지만, 최신 버전(6.9.X - https://github.com/torvalds/linux/blob/v6.9/lib/sort.c) 에서는 generic_swap 함수를 찾을 수 없습니다. 물론, 코드를 읽어보면 강사님이 해주신 내용으로 충분히 이해가 가능합니다. 핵심 아이디어는 동일하다는 것이겠지만, 조금씩 다른 부분, 그리고 시간이 더해지면서 발전한 코드가 있을 것 같아, 질문으로 남깁니다
-
미해결홍정모의 따라하며 배우는 C언어
강의 초반부 질문
a와 a_ptr을 출력했을 때 왜 동일한 값이 나오는지 이해가 가지 않습니다.전 a에는 123이 저장이 됐고 포인터 변수 a_ptr을 선언하고 포인터 변수가 a의 주소를 가리키니까 a의 주소 시작점이 정수로 출력된다고 이해했는데 이게 틀린 건가요? 앞강의에서 보면 a에 저장된 값과 주소의 시작점이 같진 않아서 다르게 출력될 것이라고 예상을 했는데 어디가 틀린 것인지 잘 모르겠습니다.그리고 강의가 진행됨에 따라 *a_ptr의 값이 변화가 없던데 이것도 잘 이해가 가지 않습니다. a의 값이 바뀜에 따라 주소도 바뀔 거라고 생각했는데 혹시 이게 아니면 똑같은 위치에 a의 값만 바꿔넣는 식으로 컴퓨터가 작동하는 것인가요?
-
해결됨Windows 시스템 프로그래밍 - 기본
메모리 맵 강의 예제의 결과가 이상합니다.
과제로 내주신 memcpy 문제는 압축도 풀리고 파일도 제대로 열립니다.그런데 예제의 strcpy_s()의 경우는 MYFILE.TXT를 열어보면 문자가 다깨지고 길이도 이상합니다.디버그 모드로 메모리를 보면 값이 제대로 들어가는게 보입니다만...해결방법을 찾지 못하겠습니다. 해결법이 있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
6-1 강의 질문
반복문 while (status == 1) 일때조건문이 true여야 실행 되는 거 아닌가요? 근데 status 에 10, 20 이런식으로 입력해도 실행이 되는 이유를 모르겠어요..ㅠㅠ
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
스택의 POP코드 질문드립니다.
안녕하세요 오랜만에 질문드립니다.현재 가정을 헤드노드->Test03->Test02->Test01->테일노드 이렇게 있다고 가정을 했을 때pPop->pNext->pPrev = g_TailNode.pPrev; 이 코드에서 질문있습니다.제가 이해한것을 풀어쓰느라 조금 길거 같습니다.흐름상 pop 구조체 포인터가 Test03노드를 가리키고 있고 헤드의 다음노드를 Test02로 바꾸는것까지 이해했습니다. 그다음 pop 다음 노드의 이전 노드 즉 Test02의 이전 노드가 테일 노드의 이전 노드를 가리킨다고 하는데 현재 흐름 상 보면 Test03의 다음노드의 이전노드가 Test01노드라고 하는걸로 해석이 됩니다. 제가 어느 부분에서 이해를 못한 건지 모르겠습니다.그리고 다음 코드를 이렇게 고쳐도 출력에는 이상이 없는 것으로 확인됩니다.
-
해결됨독하게 시작하는 C 프로그래밍
연령별 버스 요금 계산 (문자열 선언 및 출력 질문)
안녕하세요. 불철주야 고생 많으십니다! 해당 예제의 최종 출력 결과물에 "성인", "영유아" 등의 문자열을 추가로 반영하고 싶습니다.초기 변수 선언 :int age = 0, fee = 1000;double rate = 0.0;char[32] = { 0 }; 조건문 : name = "성인".... 최종 결과물은 다음과 같이 나타냈습니다.printf("나이: %d, %s, 요금: %.0f", age, name, fee*rate);위와 같이 진행했을때 문자열 관련한 오류가 뜹니다.도움 받고 싶습니다. 감사합니다!
-
해결됨독하게 시작하는 C 프로그래밍
연령별 버스 요금 계산 문제에서 범위에 따른 결과 차이
저는 65세를 기준으로 제어문을 만들어 보았습니다。 다만 어린이 요금 부분에 (4<= age <= 13과(age <=13)사이에 결과값에 차이가 생기는데 왜 차이가 생기는지 궁금해요
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
adtFileIO 예제코드관련 질문 있습니다.
코드를 분석하다 드는 의문점이 있어 질문드립니다.실제 자료노드와 이를 추상화 한 MYNODE로 데이터베이스가 구축되어 있는데 여기에 MYNODE를 기준으로 파일 입출력을 연동시킨 것이 이번 예제의 핵심이라고 보입니다. 이렇게 한 이유가 파일의 일부를 메모리로 옮겨올 수 있기 때문(캐싱)이라고 하셨는데 이 캐싱의 정확한 개념이 궁금합니다. 해당 예제의 offset변수를 보면 파일의 처음부터 끝까지 모든 자료에 대하여 카운트정보를 담고 있는 것으로 보입니다. 즉 파일의 일부가 아닌 전부가 MYNODE기준 메모리상 데이터에 연동되고 이 후 선택노드의 추가 데이터만 메모리상데이터에 추가되는 것으로 보이는데 캐싱이라는 개념이 파일데이터들의 일부만 메모리에 옮기는 것이 아니라 일단 모든 목록(인덱스)를 올린 후 선택 노드의 데이터만 추가하는 개념인 것인지. 아니면 원래는 파일데이터의 목록까지도 일부만 올리는 개념인데 예제에서는 간략화하여 설명된 것인지 궁금합니다.SaveNewDataToFile()함수를 살펴보면 pTmp->bNew 불리언 변수가 true일 때 파일쓰기가 일어나는데 이는 기존 데이터가 존재하는 노드인 경우 데이터를 수정시 파일쓰기가 되지 않는 오류가 있지 않나 생각됩니다. 즉 commit이 노드데이터 수정 후 일어나지 않으면 프로그램 종료시 호출되는 SaveNewDataToFile()함수로는 수정데이터의 파일출력이 일어나지 않는 것 아닌가 하는 의문이 듭니다. 두 째 질문은 강의 중에 언급해 주신 부분을 확인했습니다. 감사합니다. 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
4.9 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?
4.9 강의 질문입니다.#include <stdio.h>int main() {float n1 = 3.14f; // 4bytes doublen2 = 1.234; int n3 = 1024;printf(”%d %d %d\n”, n1, n2, n3);}printf는 float를 double을 변환시킨다고 하셨는데. 만약에 float를 강제로 4byte를 가지게 하게 했을 때, 어떤 식으로 나오는 지 출력을 해봤습니다.그럼에도 불구하고 쓰레기값으로 나오더군요.그러면 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?특히printf(”%lld %lld %d\n\n”, n1, n2, n3); 에서도메모리의 크기를 맞춰주어도 쓰레기 값을 출력해준 것을 보면..// 제 컴퓨터에서는printf("%f %d %d\n\n", n1 ,n2 ,n3) // O X X }가 O X O로 제대로 출력이 됩니다..파일명도 .c로 끝나는데..8분 강의에 제가 이해가 안되서 2시간을 쏟고 있어요.. 뭔가 머리가 아픕니다..
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
ADT강의 관련 질문 있습니다.
항상감사합니다.ADT강의 보고 코드 확인하는 중 질문이 생겨 글 올립니다. 1.동적바인딩과 다형성 등 사용성 증가를 위해 구체 자료를 가리키는 추상화 자료노드를 구성하여 함수로 그 추상화자료노드에 일차적으로 접근하는 개념이 ADT라고 파악되는 데 여기에 함수 포인터를 구조체 맴버로 포함시킨 이유가 궁금합니다. 그냥 구조체 외부에 선언된 getkey 함수를 사용해서 sorting을 해도 기능상 차이는 없을 것 같은데 포함시키신 이유는 객체지향개념을 적용하기 위함인지 아니면 구조체 안의 함수포인터 변수로 실현된 getkey 함수가 외부에 선언된 getkey함수를 사용할 때와 비교해서 실제 기능상 차이가 있는지 궁금합니다. 2.함수포인터는 함수를 가리키는 포인터 변수로 함수의 이름과 같으면 안되는 것으로 알고 있는데 이 예제의 경우 컴파일 되는 것은 구조체 안의 포인터 변수라서 그런 것인지. 궁금합니다. 3.강의에서 언급해 주신 구조체 안의 함수포인터 개념을 너무 흥미있게 들었습니다. 그렇다면 그 개념의 연장선이 객체지향 클래스 개념이라고 보는데 결국 c언어는 절차지향. c++은 객체지향으로 단편적으로 구분되는 것이 아니라 c언어 프로그래밍시 하나의 기능단위 캡슐화를 시도하는 프로그래밍 기법이 객체지향이 아닌지. 그리고 그것을 구현하기 쉽게 만든 것이 c++같은 객체지향 프로그래밍 언어가 아닌가 하는 궁금증이 생겼습니다. 이런 관점에서 보자면 함수포인터는 결국 c언어 안에서 이미 함수형프로그래밍의 개념으로 접근할 수 있는 수단이 아닌지 하는 생각도 듭니다. 이러한 접근이 맞는 것인지 여쭤봅니다. 4.getkey함수가 name 이나 phone을 반환하는데 호출함수이름이 SortListByKey()가 적절하지 않나 궁금합니다. 5.기타 질문으로 lineardatastructure.c 파일 안의 한글이 깨져 보이는 문제가 있는데 비쥬얼 스튜디오 및 윈도우에서 utf-8으로 환경설정을 전부 변경해도 여전히 깨져 보입니다. 다른 해결방법이 있는지 궁금합니다. 감사합니다.
-
미해결
c++ 이상하게 저장되는 코드 질문있습니다
void put2byte(void *dest, uint16_t data){ *(uint16_t*)dest = data; } uint32_t num_data = hdr.get_num_data(); void* offset_array = hdr.get_offset_array(); //오프셋 어레이 받아오기 uint16_t now_data_region_off = hdr.get_data_region_off(); void* data_region = 0; uint16_t off = 0; uint16_t remain_data_region_off = now_data_region_off - input_record_size; put2byte((void*)((uint64_t)offset_array + num_data * 2), remain_data_region_off); 이렇게 되어있는데 remain_data_region_off 이 값이 37이하이면 37이하로 저장되는게 아니라 이상하게 저장이 되는데 무슨 문제인지 모르겠습니다 예를 들어 remain_data_region_off = 37 이면 7717이 저장되는데 num_data가 6일때만 발생합니다 0~5까지는 제가 설정한 값대로 저장이되는데 이유를 모르겠습니다
-
해결됨독하게 시작하는 C 프로그래밍
섹션14 최대값 실습문제
안녕하세요 교수님!개린이(개발자어린이) 실무자 입장에서오랜만에 잊고있던 C언어를 써야할 일이 생겨서강의를 신청했는데 너무 재미있고 유익합니다.완전 입문 보다는 더 심도깊고 폭넓게 알려주셔서 너무 좋습니다.저는 아래와 같이 코드를 작성해봤는데한번 봐주시면 감사하겠습니다. 1.int MaxValue(int a, int b, int c) { int max = a; if (max < b) max = b; if (max < c) max = c; return max;}int main(void){ int num1 = 0, num2 = 0, num3 = 0, finalValue = 0; printf("정수를 3개 입력하시오. "); scanf_s("%d%d%d", &num1, &num2, &num3); finalValue = MaxValue(num1, num2, num3); printf("최대값은 %d 입니다\n", finalValue); return 0;}
-
해결됨독하게 되새기는 C 프로그래밍
pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.
섹션1 문자(배)열 상수는 어디에 저장되는가?에서 4분쯤에 나오는char* pszParam = "Hello World\n";printf(pszParam); printf("Hello World\n"); 여기서 pszParam을 디버거 메모리에서 수정시 아래 hello world가 왜 수정되는지 잘 이해가 되지 않습니다. 기본적으로 다른 메모리 공간에 저장 되어야 될꺼라고 생각되는데 컴파일러가 알아서 최적화 했다고 봐도 될까요? printf("Hello World\n"); 여기를 글자 한개만 더 넣어도 pszParam을 수정해도 아래 print 되는 문자열이 같이 수정되지는 않았습니다. 그리고 질문하면서 궁금해진 점이 printf("Hello World\n");이것만 있을 때 이 hello world! 가 쓰여진 주소를 알 수 있는 방법이 있을 까요?
-
미해결홍정모의 따라하며 배우는 C언어
flag
flag의 기능이 잘 이해가 되지 않습니다. 다른 건 다 이해가 되는데 flag가 true이고 false일 때 어떻게 달라지는지, 예를 들어 flag가 처음에 false로 설정이 됐으면 false인 상태가 유지가 되면 어떻고 true로 바뀌면 어떤지가 이해가 잘 안 됩니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
RangeSearch002 의 singlelist.c 파일 중 질문 있습니다.
강사님 안녕하십니까. 양질의 수업을 제공해주셔서 잘 듣고 있습니다. 다름아니고 질문이 있어서 여쭙고자 게시글 남깁니다.다름아니고 RangeSearch002 프로젝트 중 singlelist.c 파일의 SearchByAgeRange 함수에서 아래와 같은 코드에서 이해가 되지 않는 점이 있습니다. """void** pNodePtrList = malloc(sizeof(void*) * cnt);""" 본 질문의 목적은 아래와 같습니다.ㅇ malloc을 할 때 왜 따로 타입캐스팅을 하지 않았는가? 검색해서 찾아봤을 때 malloc은 타입캐스팅을 해도 되고 안 해도 되지만 제가 한다면 (void *)malloc 으로 썼을 거 같으며, 디버깅했을 때 결과도 동일한 결과물을 제공하는 것으로 확인했습니다.혹시 잘못된 점이 있으면 따끔한 지적 부탁드리겠습니다. 감사합니다. 좋은하루 되십시오.