월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이런 식으로도 작동을 하는데 나중에 가서 문제가 생길까요?
코딩문제를 풀다가 이렇게 적었는데 작동은 하더라구요. 근데 강사님의 풀이를 들으면 너무나 달라서 이게 나중에 이렇게 적었을떄 문제가 되지 않을까 물어봅니다 int StrLen(const char* str) { int length = strlen(str); return length; } char* StrCpy(char* dest, char* src) { char* copied = strcpy(dest, src); return copied; } char* StrCat(char* dest, char* src) { char* SliceNStick = strcat(dest, src); return SliceNStick; }
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
스택과 메모리 질문입니다.
안녕하세요. 현재 강사님의 강의를 수강중인 학생입니다. 스택과 메모리강의를 방금 보았는데 이해가 안되는 부분이 있어 질문 남깁니다. 먼저 사진 1입니다. 사진 1은 강의대로 짠 코드를 f5를 눌러 디버그 했을때의 사진입니다. 현재 rsp는 0x60fe38이라고 나와있습니다. 질문1. 현재 0x60fe38에 들어있는 값은 의미가 있는 값인가요? 그 후 디버깅을 더 진행시켜봤습니다. 사진2 입니다. 사진 2는 MAX라는 함수를 실행시키기 전까지 (위에 push를 모두 실행하기까지) 디버깅을 진행한 사진입니다. 현재 0x60fe38이후 0x60fe30에 rax값이, 0x60fe28에 rbx, 0x60fe38에 5, 0x60fe38에 1이 잘 들어가 있는 것을 확인했습니다. 사진 3입니다. 문제의 사진 3입니다. 방금의 상황에서 f11키를 눌러 step into 해보았습니다. 그랬더니 rsp가 0x60fe18에서 0x60fe10으로 바뀌며 0x60fe10에 이상한 값이 들어있는것을 확인했습니다. 질문2 왜 rsp가 0x60fe18에서 0x60fe10으로 바뀐 건가요? (왜 stack이 한단계 더 쌓인건가요?) 질문3 사진 3에서 0x60fe10에 들어있는 값은 뭔가요? 질문4 사진으론 없지만 함수에서 빠져나가니 rsp가 0x60fe10에서 다시 0x60fe18로 바뀐것을 확인했습니다. 왜인가요..? 이해력이 부족하여 질문이 많습니다.. ㅠㅠ 죄송합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디스 어셈블리로 확인한 지역 변수의 관리 문의
안녕하세요. 항상 강의 잘 듣고 있습니다 :) 다름 아니라 데이터 갖고 놀기 섹션의 유의사항 항목에서 다음과 같은 궁금증이 들었습니다. 레지스터는 종류가 엄청 많지 않을텐데, 만약 지역 변수가 100개라면 어떻게 관리가 될까? 이것을 Push와 Pop으로 관리하고 있을까? 해서 디스어셈블리로 확인 해 보았는데.. hp 라는 표현을 통해 식을 처리하고 있는 것을 볼 수 있었습니다. 여기서 궁금한것은 따로 .data 영역이나 .bss 영역처럼 변수를 생성 해 준 것 같지 않은데, 어떻게 hp 를 특정 주소로 인식하여 계산을 처리하는 지 입니다. 또, 스택을 용도에 맞게 사용하고 나면 깨끗이 비워주어야 하는 것으로 이해하고 있는데 코드를 보았을 때에는 hp를 스택에서 제거하지 않는 것 처럼 보입니다... 이것은 어떻게 된 영문일까요.. ㅠㅠ 게임 개발에 대해 배우러 왔다가 어셈블리어를 공부하고 나니 궁금한 점이 막.. 생겨버리네요 ㅠㅠ 항상 감사합니다 :) - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
빌드 환경과 실행 환경이 다를 때 어떤 문제가 생기는 지 궁금합니다.
안녕하세요! 강의 정말 잘 듣고 있습니다 :) 어셈블리어 소스 코드를 빌드한 환경(아키텍쳐/운영체제)과 실행하는 환경이 다른 경우 어떤 문제가 발생할 수 있지...? 를 고민하다보니 다음과 같은 질문이 떠올랐습니다. 1. 리틀엔디안 환경에서 빌드 된 .exe 파일이 빅엔디안 환경에서 실행이 가능할까요?2. PRINT_HEX 와 같은 명령어는 운영체제에 종속적인 것으로 이해하였습니다. 윈도우즈 환경에서 빌드 된 .exe 파일을 다른 환경에서 실행하게 되는 경우 문제가 발생할까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
타입 변환 생성자에 대해서 궁금한 점이 있습니다.
안녕하세요 루키스님. 타입 변환 생성자에 대해 궁금한 점이 있어서 여쭤보러 왔습니다. 타입 변환 생성자로 인해 Knight(int hp) { ~~ } , Knight k , k = 3 이런식으로 컴파일러가 자동으로 형변환을 시켜주어서 불리지 말아야 할 타입 변환 생성자가 불리는 것으로 알고 있습니다. 그것을 막기 위해 explicit을 써주어서 컴파일러의 자동 형변환을 막는 것이고 위와 같이 대입 연산자를 통해 객체가 생성되는 것을 막는 것이라고 이해했는데요.. 그렇다면 앞으로 클래스를 만들 때 매개변수에 1개만 존재하는 타입 변환 생성자 같은 경우에는 무조건적으로 explicit 키워드를 붙이는 것이 좋은 것인가요?! 반대로 그냥 explicit 키워드를 사용하지 않고 타입 변환 생성자를 의도적으로 사용하는 사례가 있나요? 아무리 봐도 클래스 자료형에 다른 기본 자료형을 대입해서 무엇인가 행위한다는 것은 위험한 일인거 같고 왠만하면 지양하는게 맞다고 생각하는데 제가 생각하고 있는 내용이 확실한지 잘 모르겠습니다. 타입 변환 생성자를 의도적으로 사용하는 사례가 있는지와 타입 변환 생성자 같은 경우에는 왠만하면 explicit을 꼭 붙여주는게 좋은지에 대해 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
클래스 생성자를 헤더와 cpp에 나누어 선언하는 방법 관련 질문입니다.
안녕하세요. 좋은 강의 감사히 듣고 있습니다. 클래스 생성자를 헤더와 cpp에 나눌 때 관련하여 질문이 있습니다. <조건> 1. Player 클래스를 상속 받은 Knight 클래스가 있습니다. 2. Knight 클래스 생성자를 헤더와 cpp에 나누어 선언하려고 합니다. ----------------------- 방법 1 ---------------------- //헤더 파일 Knight() : Player(PT_Knight); //CPP파일 Knight::Knight() : Player(PT_Knight) { _hp = 100; } ---------------------------------------------------- ------------------------방법 2 --------------------- // 헤더 파일 Knight(); // CPP파일 Knight::Knight() : Player(PT_Knight) { _hp = 100; } ------------------------------------------------- 방법 1로 작성하니 빌드 과정에서 오류가 발생하고, 방법 2는 성공적으로 빌드가 되었습니다. 질문드릴 것은, '방법 2와 같이 작성을 해도 성공적으로 Player의 생성자를 호출해 오는가?' 입니다. 헤더 파일의 선언에서 Player의 생성자를 호출해온다고 선언을 하지 않았던게 마음에 걸리네요. 명료하게 질문을 드려야 하는데, ㅠㅠ 잘 전달이 되었는지 모르겠네요.. 으으. 그래도 답변을 부탁드려봅니다! 감사합니다.^^
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수의 정의는 전역, struct는 지역으로 인식된다 보면 되겠군요?
Test1.h에 있는 함수의 정의, struct StatInfo 둘다 Test1.cpp, CPP_Study.cpp 에서 인클루드 될 때 함수의 정의만 중복으로 인식 된다는 건 링크될 때 함수의 정의는 전역으로, struct StatInfo는 지역으로 인식 된다고 볼 수 있겠군요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
#pragma once가 함수 중복 정의만 못 막는 건가요?
함수 중복 정의만 못 막고 에러를 일으키는 거고 struct를 비롯한 다른 중복은 안심해도 되는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
const char* 질문입니다.
main함수내에서 const char* p = "Hello" p = "Bye"하면 바로 p내용이 바뀌는데 왜 함수에서는 안되는지 궁금해서 여러가지 실험을 해보니까 cont char* p = "Hello"에서 cout << p << endl; 을하면 "Hello"가나오고 cout << *p << endl; 을 하니까 'H'가나오더라구요? *p = p[0]이런 모양새라 SetMessage함수에서 *p = "Bye"하면 const 때문에 못바꾸고 p = "Hello"니까 p = "Bye"하면 이건 바뀌어야맞는거 아닌가? 싶어서요 main함수에서는 잘만 바뀌는데 SetMessage함수에서는 또 안되고 이게 왜이런거죠 도저히 이해가 안됩니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
배열과 주소 질문 있습니다.
xor ecx, ecx LABEL_PRINT_B: PRINT_HEX 2, [b+ecx] NEWLINE inc ecx cmp ecx, 5 jne LABEL_PRINT_B xor rax, rax ret section .data a db 0x01, 0x02, 0x03, 0x04, 0x05 ; 5 * 1 = 5바이트 b times 5 dw 1 ; 5 * 2 = 10바이트 강의에 나온 코드입니다. 여기서 b가 0x1, 0x0, 0x1, 0x0, 0x1.... 바이너리로 봤을때 이런식으로 저장이 돼있었잖아요. 근데 왜 출력할때 1, 0, 1, 0, 1이 아니라 1, 100, 1, 100, 1인지 잘 모르겠습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
pp[ 주소1 00000001 ] 인게 맞는 거 아닌가요?
메모리 창에 &pp 해서 나온 주소값이 가리킨 곳으로 가면 pp인 거잖아요 pp에 들어있는 값이 0000 0001 이면 주소2 [ ] 주소1(유효하지 않은 주소) [ ] pp [ 주소1 00000001 ] int** pp = (int**)arr2; 이렇게 주소2가 가리키는 곳 (**pp)까지 갈것도 없이 *pp단계에서 크러쉬 되는 거 아닌가요? pp 자체가 주소인데 왜 &를 붙여서 &pp를 메모리 창에 입력하는 건가요? &를 붙이면 pp의 주소가 되니 int***pp 로 되는거 아닌가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
CMD창 문제
경로 대로 했는데 지원되지 않는 16비트 응용 프로그램 이라고 에러뜹니다. 실행파일 속성 켜서 호환성 xp 서비스팩2로도 바꿔도 보고 관리자권한으로 켜서 디렉토리지점가서 켜봤는데도 안되네요..ㅠ ㅠ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
visual studio 설정
visual studio 사용하시는걸 보면 클래스나 변수 함수 다 기본 설정이 아닌데 따로 설정하시는 룰 같은게 있으신지 궁금합니다. 제가 따로 설정해보려해도 뭘 설정해야 원하는게 바뀌는지 찾기가 쉽지 않아서요 알려주실 수 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
끝 인덱스에 삽입 혹은 삭제 부분에 질문있습니다
영상에서 7분40~8분 내용에서벡터의 끝 부분에 삽입 삭제부분에서궁금한것이 있습니다1. 벡터에서 사이즈와 캐패시티를 전 시간에 배웠는데요만약 제가 vector<int> a;a.resize(100);a.reserve(100);으로size와 capacity크기를 정한후a배열에 포문으로 아무런 값을 넣은후에a벡터 push_back으로 끝 부분에 새값을 추가 한다면capacity는 100이란 한계떄문에 150으로 증가를 할텐데이때 기존에 있던 메모리공간에서새 메모리공간으로 이사비용이 들텐데요이런경우에선 배열끝에 추가를 해도capacity떄문에 비용이? 든다는게 맞을까요
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수포인터는 c#의 대리자와 같은건가요?
혹시 함수포인터와 c#의 대리자의 차이점이 있을까요?속편하게 둘이 같은거라 생각해도 문제 없을까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
어셈블리에서 monster 값을 넣고 info 값을 또 넣는게 중복 아닌가요?
EnterLobby에서 lea eax, [monster] 이렇게 eax에 monster의 주소를 넣어 줬잖아요. 근데 CraeteMonster에서 mov eax, dword ptr [info] 이렇게 eax에 또 넣어 주잖아요. C++에서는 &monster가 CreateMonster(StatInfo* info)의 매개 변수로 들어가는 거니까 사실 Monster의 주소가 info인건데 eax에 &monster도 넣어주고 &info 넣어주고 그러면 먼저 넣어준 &monster는 없어지는 거 아닌가요? 그냥 data가 겹쳐지는 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
마지막 부분에서 push rax, rbx 부분 질문드립니다.
안녕하세요! 좋은 수업 해주셔서 감사합니다. 마지막 부분에서 push rax, rbx와 pop rbx, rax를 해준 부분은 rax와 rbx의 값에 주소를 할당하여 저장을 해주고 MAX 함수에서 rax rbx를 사용하고 난 뒤 함수가 끝나면 pop을 이용하여 rax , rbx의 값을 주소를 이용하여 다시 원래 갖고있던 중요한 값으로 되돌린다는 의미가 맞을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연산자 오버로딩 질문입니다.
템플릿 특수화를 사용하면 ostream& operator<<(ostream& os, const Knight& k) { os << k._hp; return os; } 이런 오버로딩은 필요가 없는 건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
공부순서 질문있습니다..!
저는 언리얼을 공부하기 위해 cpp을 배우고 있습니다. cpp -> 게임 수학 || 자료구조 및 알고리즘 -> 언리얼 순서로 공부하려고 합니다. 나중에 언리얼과 cpp의 기본기를 적립했다고 생각되면, 서버쪽도 공부할 예정입니다. Rookies님이 콜백함수 전까지만 공부해도 언리얼은 충분히 활용할 수 있다고 강의에서 말씀하셨습니다. 그래서 콜백함수와 STL을 나중에하고 지금은 바로 Modern c++로 넘어가려고 하는데, 이런 순서로 해도 괜찮을까요?? 제가 시간이 많지 않아서 효율적으로 공부하고 싶어 이런 질문을 남깁니다..!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
멤버 함수 포인터 질문입니다.
함수 원형 선언같은 경우는 정의는 밑에 있고 맨위에 원형만 선언해주면 이 함수를 쓸거니까 알아둬라 이런 의미로 넘어가는걸로 알고있는데 typedef int(Knight::*PMEMFUNC)(int, int); 이 구문은 왜 그렇게 넘어가질 않는지 궁금합니다