본문 바로가기

Tech

[기초] C/C++ 에서 에러를 최소화하는 코딩 법

C/C++에서 가장 치명적으로 작용하는 오류는 어떤 식으로든 메모리 에러일 것이다.

메모리 에러는 코드 작성시부터 조심하지 않으면 언제든지 마주칠 수 있다.

 

가장 기본적인 에러 해결법을 정리해보고자 한다.

 

1. 메모리 할당/해제는 반드시 그 블럭 내에서 쌍으로 쓰여야 한다. (육안으로 오류 상황이 금방 체크되어야 한다.)

2. 1번에 덧붙여서 메모리 할당/해제는 같은 탭 위치에서 하는 것이 좋다.

2. 배열을 new 했으면 배열을 delete 하라. (delete 시 [] 문자를 정확히 써라)

3. 문자열 배열은 반드시 원하는 길이에서 +1을 하라. (널문자 포함해야 하므로)

4. 포인터를 반복문에서 사용시 사이즈와 반복문 횟수를 체크하라. (특정값 체크 종료 조건만 사용하면 안된다)

5. 메모리 할당과 해제는 최소화해라.

로컬에서 사용하는 작은 크기의 고정사이즈 버퍼는 배열 선언으로 쓰자.

이 때 커다란 크기의 로컬 배열 선언은 시스템에 따라서 스택 오류를 낼 수도 있다.

1, 2번 사항은 버퍼가 가변 길이일때 할당과 해제를 하는 것이다.

6. 메모리 safe가 가능한 함수를 애용하자. (strcpy 대신에 strncpy 처럼)

7. 전역 변수와 로컬 변수, 클래스 멤버 변수는 네이밍으로 구분되게 하자.

실무에서 전역변수에 메모리 할당을 하지 않는다.

실무에서 클래스 멤버 변수에 메모리 할당은 초기화 할 때 사용하는 것이다.

실무에서 자유로운 메모리 할당은 로컬변수에 적용한다.

*** 요점은 변수 타입마다 용법을 다르게 메모리 사용 규칙을 정한다는 것이다.

 

 

코딩은 규칙이 있어야 한다.

 

메모리 사용에 관해서 규칙을 정해놓으면 규칙에 어긋나는 코드를 검증하기 쉽다.

규칙에 어긋난다는 것은 메모리 오류 가능성이 크다는 것과 일맥 상통한다.

 

물론 위의 7가지 규칙은 우리 팀에서 사용하는 규칙이므로 다른 팀의 정답은 아니다.

 

C/C++가 난해한 코드 작성이 가능한 언어지만 실제로 실무에서 그렇게 작성하면 안된다.

 

무조건 간결하고 쉬운 코드, 규칙성이 있는 코드가 되어야 한다.

차후 유지/보수/개선을 고려하면 이것 만은 정답에 가까운 것 같다.

'Tech' 카테고리의 다른 글

코드 정리 #2  (0) 2018.07.26
코드 정리 #1  (0) 2018.07.25
기본 Base64의 urlsafe 한 변형 버전이 있다.  (0) 2018.07.25
One Time Coding  (0) 2018.07.24
[고급] 멀티 쓰레드에서 연속된 데이터 쉐어링 방법  (0) 2018.07.24