본문 바로가기
Debug assertion failed 6가지 해결 방법 (debugger 팁) Debug assertion failed 6가지 해결 방법 (debugger 팁) Assert() 사용 간혹, Release 모드에선 정상, Debug 모드에선 에러가 발생하는 경우가 있습니다. Assert()는 Release 모드에선 무시가 되며, 에러가 발생하는 부분을 포함하지 않게 됩니다. 즉, 오류가 발생하는 부분을 컴파일러가 잘라버리고 프로그램이 구동되니, 실제로는, Release 모드에서 "정상"이라고 말할 수 없습니다. 서비스팩 옆 동료는 디버깅이 잘되는데, 나만 안된다면, 서비스팩을 설치해서 오류가 나던 부분의 소스 코드를 비교해 보세요. 서비스팩을 설치해서 오류를 제거했다면, 분명 뭔가 다를 겁니다. 서비스팩을 설치해서 오류를 제거했다면 말이죠. DDX_Text(), Resource.h... 2017. 10. 7.
[안드로이드 강좌] NFC Reader 프로그래밍 소스 (Mifare) [안드로이드 강좌] NFC Reader 프로그래밍 소스 (Mifare) 안드로이드 강좌 - Mifare NFC Reader 프로그래밍 기초 안드로이드 Mifare NFC의 기본 구조는 참조 링크(Mifare 카드구조)에서 확인하시고, NFC Reader로 NFC 데이터를 읽기 위해선 NDEF를 거쳐야 합니다. 이 과정은 어느 분께서 pdf(NDEF NFC Forum Spec.pdf)로 정리해 주셨으니 문서로 확인하시면 됩니다. 안드로이드 Mifare NFC 중 A타입은 위와 같습니다. 16개의 섹터는 각각 4개의 블럭을 보유하고 있고, 각 블록 중 3개 블록은 위와 같은 구조로 이루어져 있습니다. 정확한 Mifare NFC 스펙과 구조는 fcd-14443-3과 fcd-14443-4의 pdf 파일에 있고,.. 2017. 10. 6.
[C++구조체] #Pragma Once 사용, 헤더파일 안전하게 사용 [C++구조체] #Pragma Once 사용, 헤더파일 안전하게 사용 1. 소개 헤더 파일은 프로그램에서 사용할 요소들을 미리 선언하고 정의한 내용을 담고 있습니다. 예를 들면, Class Template의 Layout 정보는 헤더 파일에 정의되어 있고(사용할 변수, 함수 등), Implementation File들은 실제로 함수와 변수들을 구현합니다. 2. #Pragma Once, 헤더 파일 Include .h나 .hpp의 확장자의 헤더 파일은 #include로 참조할 수 있고, .cpp 파일은 헤더 파일의 선언부 정의 내용을 담습니다. 아래는 선언 예입니다. 12#include "stdafx.h"#include cs 3. 두 가지 타입의 Include와 #Pragma Once 사용할 라이브러리는 한 .. 2017. 10. 5.
[C++구조체] #Pragma pack(1) 지시어 이해하기 [C++구조체] #Pragma pack(1) 지시어 이해하기 Word Alignment(#pragma pack) Word Alignment(#pragma pack)는 어려운 개념은 아니지만, 매우 중요한 개념입니다. 우리는 하나의 word가 4바이트란 건 알고 있습니다. 메모리 주소 체계도 4바이트로 이뤄지며, 0x01ab23cd와 같은 값은 0x01, 0xab, 0x23, 0xcd로 각각 분리되어 저장되는 것도 알고 있죠. 알아야 #pragma pack도 이해할 수 있습니다. 그 저장되는 방법은 little Endian과 Big Endian으로 이 경우엔 0x01이 맨 뒤, 또는 맨 앞에 저장될 겁니다. 다소, 부정확한 의미가 될 순 있지만, 0x01이 저장된 주소가 N(1001) 번지라면 그다음 주소.. 2017. 10. 4.
비주얼스튜디오 프로젝트 파일 설명(sln, suo, user, vcproj, ncb, sdf) 비주얼스튜디오 프로젝트 파일 설명(sln, suo, user, vcproj, ncb, sdf) 프로젝트 파일들이 하는 역할 솔루션과 프로젝트를 생성하면 자동으로 생기는 몇몇 파일들에 대한 설명을 기록합니다. sln : 텍스트 파일로 한 솔루션이 관리하는 여러 프로젝트에 대한 정보를 보유, 2008과 2010이 호환되지 않으므로 반드시 변환.suo : 바이너리 파일로 여러 작업 내용, 혹은 설정(탭 위치나 창 정보) 등이 저장.user : 사용자별 설정이 저장.vcproj : visual c++ 프로젝트 파일로 프로젝트가 어떤 파일을 가졌는지에 대한 정보를 보유.ipch : 컴파일 때 여러 파일이 저장.ncb : 비주얼 스튜디오 2008에서 intellisense를 위해 저장하는 데이터베이스 파일.sdf .. 2017. 10. 3.
[C++강좌 리팩토링] 메모리 최적화, Unions 이용 [C++강좌 리팩토링] 메모리 최적화, Unions 이용 Unions 또한 리팩토링과 메모리 낭비를 막기 위해 사용할 수 있다. 데이터 멤버 중 (최소한) 하나라도 활성화되면 같은 메모리 공간에 모든 데이터 멤버가 위치하기 때문이다. union은 데이터 멤버를 모두 저장할 수 있으며, 생성자와 소멸자를 포함할 수 있다. 하지만 가상 멤버 함수를 가질 순 없다.union은 다른 클래스의 기저 클래스로써 사용될 수 없으며 다른 클래스로부터 상속할 수도 없다.union은 비자명한 특수 멤버 함수들을 가지는 객체들을 저장할 수 없다. C++에서는 익명의(anonymous) unions을 지원한다. anonymous union은 이름이 없는 객체이다. 예를 들면, 명명된 union과는 다르게 익명의 union은 .. 2017. 10. 2.
[C++강좌] 메모리 최적화, 리펙토링 (Bit Fields 프로그래밍 성능 관리) [C++강좌] 메모리 최적화, 리펙토링 (Bit Fields 프로그래밍 성능 관리) 메모리 사용 최적화(Optimizing Memory Usage) C++ 강좌, 메모리 최적화 장점 - 더 빠른 실행속도 - 시스템 자원들의 효율적 사용 - 메모리 최소 사용 코드 최적화 위의 모든 것을 향상하려 노력한다. 그리고 C++에서 선언 재할당 기법은 불필요한 객체 생성과 해제를 제거하여 프로그램 크기를 줄이고 실행시간 속도를 향상한다. 그러나 다른 최적화 기법들은 하나의 방향(더 빠른 코드 또는 더 작은 메모리 점유)으로 심하게 치우친다. 때론, 최적화 목표들은 상호 배타적이기도 하다. 즉, 메모리 점유를 작게 만드는 것은 더 느린 코드를 초래하며 반면에 더 빠른 코드는 더 큰 메모리 점유로 이어진다. 이 포스팅.. 2017. 9. 30.
자바 단일 스레드 사용 이유와 GUI 프로그래밍, 멀티스레드는? 자바 GUI 프로그래밍, GUI는 왜 단일스레드일까? 예전에는 자바 GUI 프로그래밍 애플리케이션이 단일 스레드로 동작했으며, 자바 GUI 이벤트는 애플리케이션의 메인 이벤트 반복문main event loop에서 처리했었다. 하지만 최근에 등장한 GUI 프레임웍은 약간 다른 구조로 만들어져 있는데, 이를테면 『이벤트 처리 스레드 EDT』, event dispatch thread에서 자바 GUI 이벤트를 전담해서 처리하게 돼 있다. 자바에서만 GUI 프레임웍을 단일 스레드로 구성한 것은 아니다. Qt, 넥스트스텝NextStep, Mac OS의 코코아Cocoa, X윈도우 등을 포함한 대부분의 자바 GUI 프레임웍이 단일 스레드로 동작하게 돼 있다. 그렇다고 해서 아무도 단일 스레드를 벗어나려고 시도하지 않았.. 2017. 9. 29.
기업 경영 시스템 두가지, ICE 모델과 SPICE 모델 기업 경영 시스템 두가지, ICE 모델과 SPICE 모델 ICE 경영 모델나 홀로(stand alone) 경영 모델이다. 이와 달리 SPICE 모델은 이해관계자들과의 상호 작용을 통한 생태계(ecosystem) 기업 경영 시스템(모델)이라 할 수 있다. SPICE 모델ICE(얼음) 같이 차고 냉정한 경쟁을 넘어 협력하고 공생하는 기업 경영 시스템 세계를 만들어가는 SPICE(양념) 역할의 의미로도 해석할 수 있다. (기업 경영 시스템) 생태계 경영은 나보다 우리가 좋은 비즈니스 세계를 만들어가고자 하는 노력인 만큼 다른 조직과 상생하고 공존하려는 노력이 필요하다. 생태계 관점에서 보면 개체 간에는 늘 경쟁만 할 것이 아니라 협력도 필요하다. 최근에는 기업의 경쟁 구조가 개별 기업 경영 시스템의 상품 간 .. 2017. 9. 28.
이클립스 설치와 cdt 설정, ARM 보드 우분투(ubuntu) 기반 이클립스 설치와 cdt 설정, ARM 보드 우분투(ubuntu) 기반 ARM Cortex a15가 장착된 NVDIA의 Tegra K1에서 이클립스 설치하고 cdt를 설정해 봤습니다. 내용을 보시면 아시겠지만 ARM 보드 우분투 환경이라고 해서 윈도우와 큰 차이가 있는 것은 아닙니다. 이클립스가 기본적으로 cdt만 설치해주면 알아서 C++ 환경에 필요한 사항을 알아서 보여주니깐요. 1. jdk와 이클립스 설치 ARM 보드 우분투에서 터미널을 열어 아래처럼 패키지를 설치합니다. 123sudo apt-get install sun-java7-jdksudo apt-get install eclipsesudo apt-get install eclipse-cdtcs SUN 공식 홈페이지에선 ARM 보드 파일을 지원하지 .. 2017. 9. 28.
[Visual Studio 버전] 컴파일러, _MSC_VER, MFC, 닷넷 (비주얼 C++) [Visual Studio 버전] 컴파일러, _MSC_VER, MFC, 닷넷 Visual Studio에서 위와 같은 _MSC_VER 버전 한 번쯤은 보셨을 겁니다. _MSC_VER은 컴파일러 버전별 매크로 상수값으로 Visual Studio에서 사용하는 컴파일러에게 나를 작업한 컴파일러가 누군지 알려주는 역할도 하게 됩니다. 그리고 Qt 소스나 OCC 같은 3rd party 소스를 빌드하기 위해서도 알아야할 필요가 있는데요.가령, Qt 5.5를 Visual Studio 2015에서 사용하고 싶다면, 2015에 맞는 컴파일러 매크로 상수값이 1900이란 숫자를 알아야 하는 것이죠. 저도 매번 Visual Studio 매크로 상수값을 따로 찾아보다 이젠 한계가 오네요. 그래서 제 블로그에 따로 정리합니다.너.. 2017. 9. 27.
[비주얼 스튜디오 강좌] VisualStudio2012, XP에 프로그램 배포 설정 [비주얼 스튜디오 강좌] VisualStudio2012, XP에 프로그램 배포 설정 이번 비주얼 스튜디오 강좌에선 VisualStudio2012에서 XP에서도 구동되는 응용 프로그램을 만드는 방법입니다. 1. 프로젝트 속성 변경 우선, 프로젝트 속성에서 "플랫폼 도구 집합" - "Visual Studio 2012 - Windows XP (v110_xp)"을 선택합니다. 2. 재배포 패키지 설치 (VC++ 11.0) 그리고, 프로그램이 구동될 PC에는 mfc110u.dll, msvcr110.dll 등의 파일이 필요합니다. 일일이 처리해주기 귀찮으니, 재배포 패키지를 설치해서 한 방에 끝냅니다. (아래 링크 사이트에서 VC++ 11.0을 다운 받은 뒤, XP 컴퓨터에 설치하세요) ▶ Latest Suppor.. 2017. 9. 27.