본문 바로가기

분류 전체보기197

[MFC / C++] Vector 사용법과 List간의 차이 [Vector]C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적 할당됩니다. 물론 속도적인 측면에서 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리하고 예외처리가 쉽다는 장점이 있어 많이 사용하고 있습니다.  [Vector와 List]vector와 list 모두 std 함수에 포함되어 있습니다. 공통점은 연속된 데이터의 집합입니다. 차이점은 vector는 다음 데이터가 바로 옆에 있는 주소에 입력되어 있고 list는 어디에 다음데이터 있다는 정보를 가지고 있으나 임의의 메모리 공간에 자리 잡고 있다는 점입니다. 이 .. 2024. 6. 4.
[MFC / C++] Cognex In-Sight Wafer Install error (Error 1935. assembly component) [ActiveX 컨트롤 에러]MFC에서 View에 특정 ActiveX 컨트롤을 당겨와서 사용하는 경우 해당 프로그램이 컴퓨터에 설치되어 있지 않다면 Visual Studio로 해당 소스를 오픈할 때 컨트롤 에러가 발생합니다.'이 컴퓨터에 ActiveX 컨트롤이 등록되지 않았습니다. 컨트롤을 등록한 다음 다시 시도하십시오.'해당 에러는 불러와지지 않는 View에 어떤 ActiveX를 당겨와서 사용하는지 알아야 오픈이 가능하기 때문에 개발자는 반드시 정보를 백업하며 개발해야 합니다.만약 백업된 정보가 없다면 Debug를 통해 어떤 다이얼로그를 오픈할 때 에러가 발생하는지 찾아야 합니다. 필자는 Cognex In-Sight 프로그램이 설치되지 않아 발생했습니다. 그러나 설치 도중 다른 에러를 발견했습니다. [.. 2024. 6. 2.
[MFC / C++] 메모리 누수 확인하고 조치하기 / CPtrList 메모리 leak 현상 해제하는 방법 / normal block at error [Memory leak현상]Memory leak이란 프로그램에서 나 여기 쓸 거라고 공간을 확보해 놓고 사실상 명의만 바꿔놓고 사용하지 않는 공간이 되어버리는 걸 의미합니다. 운영체제 입장에서는 안 쓰는 걸 알고 있지만 언제 사용될지 모르는 공간이기 때문에 명의를 임의로 변경할 수 없는 상태로 계속 놀고 있는 공간이 되어버리는 것이지요. 지난번 포스팅한 배열 선언에서도 leak이 발생할 수 있지만 앞으로 사용하는 수많은 포인터 세계에서도 leak이 발생할 수 있음을 고려해야 합니다. (지난 포스팅 : Delete 함수와 Delete[] 함수의 차이점을 알고 Memory leak현상 조치하기) C++은 C#과 다르게 컴포넌트의 선언이 대화상자를 통해 구성되기 때문에 자동으로 바인딩이 되는 구조인 것 같습니.. 2024. 5. 31.
[C++] 배열 new를 사용해 선언했지만 스칼라 delete로 삭제했습니다. 발생 이유와 해결 방법 [Memory leak현상]C++에서는 C#에서와 달리 애플리케이션에서 주기적으로 가비지컬렉터(GC.Collect)에 설정된 배열에 데이터가 없더라도 이미 사용 중인 메모리 공간으로 인식하여 프로그램을 종료해도 메모리가 해제되지 않는 상황이 발생합니다 어떻게 보면 메모리를 딱 필요한 만큼만 사용하기 때문에 효율적이고 빠르다고 생각할 수 있으나 개발자 입장에서는 매우 귀찮은 일이 아닐 수 없습니다.메모리가 해제되지 않으면 PC를 재부팅하지 않는 이상 메모리 주소값이 동결되어버리는 leak현상이 발생되고 해당 현상이 반복되면 시스템 효율에 큰 이상점을 발생시키게 되고 결과적으로 프로그램의 성능을 떨어뜨리는 역할을 하게 됩니다. 해당 현상이 발생되지 않도록 선언된 메모리 영역을 해제시켜줘야 하는데요. 그럴때 .. 2024. 5. 29.