"이전게시판/C, C++"에 해당되는 글 - 23건
Post
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요
함수 호출하는데 () 괄호를 안넣음.
괄호넣으니 해결
'이전게시판 > C, C++' 카테고리의 다른 글
const와 포인터 (0) | 2018.05.30 |
---|---|
C3083 왼쪽의 기호는 형식이어야 합니다 에러 정방선언... (0) | 2018.05.03 |
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
프로토콜, 라우터 (0) | 2018.04.19 |
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
Post
C++ 람다식이란?
람다는 익명함수로 크게 Capture(캡쳐), Parameter(인자), Return(리턴), Body(몸체) 로 나눌 수 있다.
아무것도 안하는 람다함수는
[] () {};
로 표현할 수 있다.
[Capture] (Parameter) {Body}
1. Capture
Capture는 람다 함수 밖에 있는 변수를 가져와 사용하고 싶을 때 사용한다.
예를들어 선언되어있는 지역변수 a를 출력하고 싶다면 이렇게 한다.
[int a](){ cout << a << endl; };
괄호안에 =, & 이 들어갈 수 있는데
= 는 모든 지역변수를 값으로 사용하겠다는 뜻이고
&는 모든 지역변수를 레퍼런스로 사용하겠다는 뜻이다.
2. Parameter
람다 함수 안에서 사용할 인자를 선언한다.
만약 지역변수와 이름이 같다면 에러를 나타낸다.
그리고 생략할 수도 있다.
명시적으로 3을 출력하고 싶다면
[](){cout<<3<<endl;}();
뒤에 ();를 붙여서 쓰면 호출이 된다.
어떤 함수에 저장해서 사용하고 싶다면
auto func = [](){cout<<3<<endl;};
func()
();를 빼야 한다.
이것말고 더 어려운 부분도 있었는데 계속 정리해야겠다.
'이전게시판 > C, C++' 카테고리의 다른 글
C3083 왼쪽의 기호는 형식이어야 합니다 에러 정방선언... (0) | 2018.05.03 |
---|---|
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
프로토콜, 라우터 (0) | 2018.04.19 |
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
Post
IOCP 소켓 종료 상황
소켓이 CloseSocket으로 안전하게 끊어졌는지, 아닌지에 따라
정상종료. 비정상종료로 나눌 수 있다.
정상종료는 GetQueuedCompletionStatus 완료된 바이트 수가 0일 때..
비정상 종료는 GetQueuedCompletionStatus 함수의 리턴값이 0이고 WSAGetLastError값이 64 이다.
그리고 IO도 NULL이 아니다.
나는 이렇게 사용하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int err = WSAGetLastError(); if(NULL == userInfo) { PrintColor(YELLOW, "userInfo는 NULL! h \n"); } else if((!result && WSAGetLastError() == 64)&& ioInfo != NULL) // 비정상 종료 { printf("bytesTrans가 0이라 종료합니다 ID:%d \n", userInfo->id); closesocket(sock); int id = userInfo->id; EnterCriticalSection(&cs); UserList.RemoveKey(userInfo->id); SAFE_DELETE(userInfo); SAFE_DELETE(ioInfo); LeaveCriticalSection(&cs); printf("접속자 %d가 나갔습니다. \n", id); PrintColor(YELLOW, "접속자 나갔습니다. \n"); continue; } else if(!bytesTrans) { PrintColor(YELLOW, "정상적인 종료! \n"); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
---|---|
프로토콜, 라우터 (0) | 2018.04.19 |
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
Post
1. #include <crtdbg.h>를 한다.
2. 소스 코드 처음에 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); 을 추가한다.
3. 만약 누수가 있다면
이런식으로 나온다.
그리고 A부모 클래스가 있고 B자식 클래스가 있을 때
A* pB = new B()했을 경우
delete(pB)를 해도 메모리 누수가 되지 않는다.
'이전게시판 > C, C++' 카테고리의 다른 글
프로토콜, 라우터 (0) | 2018.04.19 |
---|---|
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
구조체 패딩이란? (0) | 2016.03.31 |
Post
옛날부터 다중상속을 하면 어떻게 되는지 헷갈렸다.
그래서 A, B를 동시에 상속받은 C가 Func를 호출하게 했다.
Func함수는 A, B 클래스에 동시에 있으므로
결론은 error C2385: 'Func' 액세스가 모호합니다.' 가 뜬다.
호출하려면 어떤 클래스인지 명확하게 지정해주고 사용한다.
그러므로 C클래스 안에서 Print 함수를 만들어서 부모를 지정해준 뒤 함수를 호출하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <stdio.h> #include <windows.h> class A { public: int a; int b; A() { a = 100; b = 101; } void Func() { printf("A입니다 \n"); } }; class B { public: int a; int b; B() { a = 200; b = 201; } void Func() { printf("B입니다 \n"); } }; class C : public A, public B { public: }; void main() { C c; printf("%d %b \n", c.a(), c.b); getchar(); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
---|---|
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
구조체 패딩이란? (0) | 2016.03.31 |
C++ 스택(Stack) 예제 (0) | 2016.03.20 |
Post
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <stdio.h> #include <windows.h> #include <process.h> #define NUM_THREAD 50 unsigned WINAPI threadInc(void* arg); unsigned WINAPI threadDes(void* arg); long long num = 0; CRITICAL_SECTION cs; int main(int argc, char* argv[]) { HANDLE tHandles[NUM_THREAD]; int i = 0; InitializeCriticalSection(&cs); for(int j = 0; j < 2; ++j) { tHandles[i] = (HANDLE)_beginthreadex(NULL, 0, threadInc, NULL, 0, NULL); ++i; } DWORD returnMessage = WaitForMultipleObjects(2, tHandles, TRUE, INFINITE); DeleteCriticalSection(&cs); printf("result:%d \n", num); return 0; } unsigned WINAPI threadInc(void* arg) { int i; EnterCriticalSection(&cs); for(i = 0; i<1000; ++i) { num+=1; printf("num:%d i:%d \n", num, i); } //LeaveCriticalSection(&cs); return 0; } unsigned WINAPI threadDes(void* arg) { int i; EnterCriticalSection(&cs); for(i = 0; i<1000000; ++i) num-=1; //LeaveCriticalSection(&cs); return 0; } | cs |
윤성우의 TCP/IP책으로 공부를 하고 있다.
데드락에 대한 예제를 찾기가 어려웠다.
예전에는 데드락이 의도치 않게 잘 일어났었는데... 지금은 잘안됨 ㅋㅋ
일단 허접하게 LeaveCriticalSection을주석처리해서 다른 쓰레드가 접근하지 못하게 했다.
내가 이해안가던게, 크리티컬 섹션에 접근을 못하는 건지, 해당 변수에 접근을 못해서
데드락이 걸리는건지 헷갈렸는데..
크리티컬 섹션을 꼼꼼히 안해주면 크리티컬 섹션 효과를 못보니까 크리티컬 섹션에 접근을 못해서 문제인 듯.
'이전게시판 > C, C++' 카테고리의 다른 글
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
---|---|
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
구조체 패딩이란? (0) | 2016.03.31 |
C++ 스택(Stack) 예제 (0) | 2016.03.20 |
C++ 간단한 원형 큐 (0) | 2016.03.20 |
Post
2의 보수로 나타내는 법..
양수는 쉬운데 음수는 좀 어렵다.
4는 그대로 0000 0100 이다.
오른쪽부터 차례대로 1, 2, 4, 8, 16, 32..... 이렇게 나아간다.
만약 -4라면
1) 4 0000 0100 에서 반전 시킨다 -> 1111 1011
2) 1을 더해준다 -> 1111 1100
-4의 2의 보수(음수) 표현은 1111 1100 가 된다.
'이전게시판 > C, C++' 카테고리의 다른 글
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
---|---|
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
구조체 패딩이란? (0) | 2016.03.31 |
C++ 스택(Stack) 예제 (0) | 2016.03.20 |
C++ 간단한 원형 큐 (0) | 2016.03.20 |
c++ 링크드리스트 만들기 (0) | 2016.03.19 |
Post
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> using namespace std; struct Player { char name; int level; short wClass; }; #pragma pack(1) struct Player2 { char name; int level; short wClass; }; void main() { Player player; Player2 player2; printf("name:%d level:%d class:%d AllSize:%d \n", sizeof(player.name), sizeof(player.level), sizeof(player.wClass), sizeof(player)); printf("name:%d level:%d class:%d AllSize:%d \n", sizeof(player2.name), sizeof(player2.level), sizeof(player2.wClass), sizeof(player2)); getchar(); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
CRT 메모리 누수 체크 (0) | 2016.04.15 |
---|---|
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
C++ 스택(Stack) 예제 (0) | 2016.03.20 |
C++ 간단한 원형 큐 (0) | 2016.03.20 |
c++ 링크드리스트 만들기 (0) | 2016.03.19 |
C++ 문자열 뒤집기, 한글 뒤집기 (0) | 2016.03.18 |
Post
간단하게 C++ 스택 예제를 만들어보았습니다.
Stack은 먼저 들어온 애가 나중에 나가는 자료구조입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include <iostream> using namespace std; #define MAX_STACK_COUNT 5 class Stack { int m_StackData[MAX_STACK_COUNT]; int m_Top; public: Stack() { memset(m_StackData, 0, sizeof(m_StackData)); m_Top = 0; } bool Push(int value) { if(isPull()) return false; m_StackData[m_Top] = value; ++m_Top; return true; } bool Pop(int& value) { if(isEmpty()) return false; value = m_StackData[m_Top]; m_StackData[m_Top] = 0; --m_Top; return true; } bool isEmpty() { if(0 == m_Top) return true; return false; } bool isPull() { if(MAX_STACK_COUNT == m_Top) return true; return false; } void Print() { if(isEmpty()) return; for(int i = m_Top - 1; i >= 0; --i) { cout<< m_StackData[i] << endl; } } }; void main() { int data = 0; Stack stackData; stackData.Push(1); stackData.Push(2); stackData.Push(3); stackData.Pop(data); stackData.Push(4); stackData.Push(5); stackData.Print(); stackData.Push(6); stackData.Push(7); stackData.Print(); getchar(); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
C++ 다중상속 문제점? (0) | 2016.04.04 |
---|---|
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
구조체 패딩이란? (0) | 2016.03.31 |
C++ 간단한 원형 큐 (0) | 2016.03.20 |
c++ 링크드리스트 만들기 (0) | 2016.03.19 |
C++ 문자열 뒤집기, 한글 뒤집기 (0) | 2016.03.18 |
[C/C++]C2512 사용할 수 있는 적절한 기본 생성자가 없습니다 에러 (0) | 2016.02.22 |
Post
간단한 원형 큐를 만들어보았습니다.
빨리 간단하게 만든거라서 틀리거나 버그가 있을 수 있습니다.
추후에 수정하겠습니다.
제가 이해한대로 만든 거라서..
아무튼 이렇게 강제 공부를 하고 있네요 ㅋㅋㅋ
나름 장점이라면 장점인가 ㅋㅋ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <iostream> using namespace std; #define MAX_QUEUE_COUNT 5 class CicleQueue { int m_Queue[MAX_QUEUE_COUNT]; int m_front; int m_end; int m_Count; public: CicleQueue() { memset(m_Queue, 0, sizeof(m_Queue)); m_front = 0; m_end = 0; m_Count = 0; } bool Push(int value) { if(isPull()) return false; m_Queue[m_end] = value; m_end = (m_end+1) % MAX_QUEUE_COUNT; ++m_Count; if(MAX_QUEUE_COUNT == m_end) m_end = 0; return true; } int Pop() { int temp = m_Queue[m_front]; m_Queue[m_front] = 0; m_front = (m_front + 1) % MAX_QUEUE_COUNT; --m_Count; return temp; } bool isPull() { if(m_Count == MAX_QUEUE_COUNT) return true; return false; } void Print() { if(m_end <= m_front) { for(int i = m_front, j = 0; j < MAX_QUEUE_COUNT; ++i, ++j) { cout<<m_Queue[i%MAX_QUEUE_COUNT]<<" "; } } else { for(int i = 0; i < MAX_QUEUE_COUNT; ++i) cout<< m_Queue[i]<<" "; } cout<<endl; } }; void main() { CicleQueue cicleQueue; cicleQueue.Push(1); cicleQueue.Push(2); cicleQueue.Push(3); cicleQueue.Print(); cicleQueue.Pop(); cicleQueue.Push(4); cicleQueue.Push(5); cicleQueue.Pop(); cicleQueue.Print(); cicleQueue.Push(6); cicleQueue.Push(7); cicleQueue.Print(); cicleQueue.Push(8); cicleQueue.Print(); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
C++ 다중상속 문제점? (0) | 2016.04.04 |
---|---|
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |
구조체 패딩이란? (0) | 2016.03.31 |
C++ 스택(Stack) 예제 (0) | 2016.03.20 |
c++ 링크드리스트 만들기 (0) | 2016.03.19 |
C++ 문자열 뒤집기, 한글 뒤집기 (0) | 2016.03.18 |
[C/C++]C2512 사용할 수 있는 적절한 기본 생성자가 없습니다 에러 (0) | 2016.02.22 |