본문 바로가기

C,C++76

[C++] VS2019 16.7 Ver. 안전성을 위한 새로운 코딩 규칙을 알아보자 devblogs.microsoft.com/cppblog/new-safety-rules-in-c-core-check/ New safety rules in C++ Core Check | C++ Team Blog Rust and C++ are two popular systems programming languages. For years, the focus of C++ has been on performance. We are increasingly hearing calls from customers and security researchers that C++ should have stronger safety guarantees in the language. C devblogs.microsoft.com Visua.. 2020. 9. 11.
LNK 1104: cannot open file ~~~ for writing 전날까지 잘되던 실행이 갑자기 저런 링크 에러가 떴음. 찾아보니 프로그램이 디버그 모드에서 이미 실행 중일 경우 뜰 수 있다함. 이미 이러한 부분은 확인해서 다른 문제인줄 알았는데 혹시나 해서 작업 관리자에서 실행 중인 프로그램 찾아보니 있었음. 종료하고 실행해보니 잘됨. 아마 어제 실행 시켜놓은 상태로 노트북을 닫아서 메모리 상에 남아있었던 듯함. 2020. 9. 7.
[C++] std::vector 컨테이너의 반복자를 통해 포인터(주소) 얻기 vector 컨테이너의 반복자를 통해 해당 반복자가 가리키는 요소의 주소를 얻을 수 있다. 우선 벡터는 연속적인 배열이기 때문에 다음과 같이 첫 번째 원소의 주소를 통해 배열의 시작 주소를 구할 수 있다. 그리고 포인터의 특성을 이용해 모든 요소에 접근할 수 있다. void main() { vector v1 {1, 2, 3, 4, 5}; int* beginAddrOfV1 = &v1[0]; for(size_t i = 0; i < v1.size(); ++i) { cout 2020. 8. 29.
멀티 스레드 잠금 순서 문제 풀어보기 https://blog.naver.com/imays/221501238012 멀티스레드 잠금 순서의 규칙 (그리고 책 광고) 안녕하세요, 배현직입니다. 멀티스레드 프로그래밍에서 교착상태(deadlock)는 중요한 주제입니다. 얼마전 ... blog.naver.com 내가 푼 방법이 맞는진 모르겠지만.. 나머지 문제는 이해가 가는데 마지막 문제는 잘 모르겠다. 2020. 8. 18.
[C/C++] 인자로 넘겨받은 배열로는 배열의 크기를 구할 수 없다. 다음과 같이 배열이 주어지면 배열의 크기와 원소의 크기를 통해 배열의 길이를 알 수 있다. void main() { int arr[] = {1,2,3,4,5,6}; size_t arr_size = sizeof(arr)/sizeof(int); // 6 } 그런데 다음과 같이 함수의 인자로 배열을 넘겨받아서 위와 같이 계산하면 구할 수 없다. void Foo(int arr[]) { size_t arr_size = sizeof(arr)/sizeof(int); // 1 } void main() { int arr[] = {1,2,3,4,5,6}; Foo(arr); } 그 이유는 인자로 arr을 받을 때 배열이 아닌 포인터로 받기 때문이다. 즉 배열의 이름(주소)을 받는다. 그래서 분자가 배열의 크기가 아닌 포인터.. 2020. 8. 2.
[C++] std::thread 기본 활용 방법을 알아보자 | mutex, condition_variable, 종료 방법 개인적으로 공부하는 내용이므로 틀린 부분이 있을 수 있습니다. 있다면 알려주세요 :) 1. 공유 자원에 대한 race condition 해결하기 (mutex) 하나의 프로세스 내에 두 개 이상의 스레드가 존재하는 멀티 스레딩 환경에선 한가지 문제점이 존재한다. 바로 하나의 자원에 여러 스레드가 동시에 접근함으로 인해 생기는 문제점이다. 예를 들어 다음 프로그램은 10개의 스레드가 생성되면서 각자 Foo 함수를 실행한다. Foo 함수에선 s_num이라는 전역 변수를 증가시키고 감소시킨다. 따라서 결과 값은 0을 기대하지만 직접 실행해보면 항상 0이 보장되진 않는다. volatile 키워드는 테스트를 위해 임시적으로 컴파일러의 최적화를 차단해두기 위함이다. volatile int g_num = 0; void.. 2020. 7. 3.