Language
NullPointerExceoption
NullPointerException이 생기는 이유는, 어떤 변수나 객체의 값이 없거나, 생성되지 않았는데, 그것을 이용하려고 할 때 발생한다. 코드(Logic)상의 문제가 아니기 때문에 Compile time에는 error가 발생되지 않고, 실제로 프로그램을 실행할 때(Run time) error가 난다. request로 값을 받는다면 그 값들이 제대로 넘어오는지, 변수를 사용해서 메소드를 호출 한다면 해당 변수에 값이 제대로 들어있는지 확인해봐야한다.
구조체 메모리 패딩 문제
typedef struct Test { char a; short b; int c; }T T A; printf("%d", sizeof(A)); 어떤 값이 출력 될까? 32bit OS에서 가정하면 char 는 1Byte short 는 2Byte int 는 4Byte로 총 7이 출력될 것 인가? 하지만 출력 값은 8이다. 구조체에서는 메모리의 크기를 4Byte씩 나눠서 저장하게 됩니다. 위의 예제에서 char형과 short형을 합치면 3바이트이므로 4바이트를 맞추기 위해 1바이트가 추가 된다. 즉 (char(1) + short(2) + 1) + int(4) 로 총 8바이트 로 저장됩니다. 이것이 바로 메모리 패딩 입니다.
전처리기
전처리기란 프로그램에서 컴파일 전에 가장 먼저 처리되는 것이라고 보면 된다. 그 중 잘 알지 못하고 있는 것 들에 대해 설명한다. 1. #pragma once - 포함된 헤더 파일들이 여러개의 소스파일에 동시에 include 되어있을 시 중복되어 충돌할 경우가 발생할 수 있다. 그때 포함된 헤더 파일들이 한번씩만 빌드 되게 설정하는 것이다. 즉 중복을 방지한다. 2. #pragma comment(lib, "*.lib") - 외부 라이브러리 링크를 코드 내에 명시할 때 사용한다. Visual Studio와 같은 통합 개발 한경이 아니더라도, Open CV나 여러 라이브러리를 코드 내에서 링크 하여 사용 가능하도록 한다. 3. #define 내부의 # - #define 전처리기 지시자는 모두 잘 알고 있겠지..