Windows가 @#!^!%!@#$%!@.exe에서 중단점을 트리거했습니다.

힙이 손상되었거나 @#!^!%!@#$%!@.exe 또는 여기서 로드한 DLL에 버그가 있을 수도 있습니다.

자세한 진단 정보는 [출력] 창을 참조하십시오.

---------------------------------------------------------------------------------------
위와 같은 에러가 난다면 보통 DLL에서 동적 메모리 생성한걸 Exe에서 삭제하거나
그 반대 경우에 발생하는 에러이다

하지만 DLL를 쓰지 않은 상황에서 에러가 난다면 다음 상황을 먼저 생각하라

나는 lib라이브러리를 사용하여 exe프로젝트를 생성했는데 위와 같은 에러가 발생했다..

에러의 원인은 동적으로 할당한 크기보다 더 크게 초기화를 하는 작업을 하여 할당한 크기보다 힙을 더 사용한 상황이고
그런 상황에서 삭제를 하면서 저런 에러가 발생했다..

다시 정리하자면 동적으로 할당한 메모리 크기가 10이라고 하면
초기화(Zeromemory 함수 사용)할때 20으로 초기화 하고
삭제를 하면서 발생한 문제이다.

고로 DLL(혹은 lib)쪽 에러를 의심하기 전에 초기화를 할당한 크기만큼 제대로 초기화 하고
삭제 했는지 확인해보자
!!!

이 에러를 잡아주신 회사 실장님에게 감사드리며...

에러 원인을 알았을때 좀 쪽팔렸다..

아무튼 프로그램의 보통 큰 원인은 이런 단순 실수로 발생하는게 많으니 앞으로 주의하며 코딩해야겠다 ㅠ.ㅠ






by 널부러 2009. 8. 21. 12:08
에 정말 할줄 몰라서 정말 애먹었네 -_-
아무튼 처리한방법에 대해서 일단 정리해 둔다.

일단 svn 서버 파일을 받아야 한다.
Subversion 다운로드 경로 : http://subversion.tigris.org/ (설치 파일 찾을려면 좀 뒤저야 한다.)
Subversion Manager 다운로드 경로 : http://www.pyrasis.com/ (메인 화면에 바로 있다.)

일단 2개의 파일을 받으면 먼저 Subversion을 설치 한다.
그 다음에 Subversion Manager를 설치 한다.

설치하고 나면 저장소를 만들어야 하는데 command 명령으로 아래와 같이 입력 해주자.
아래와 같이 저장소를 만들면 파일시스템으로 저장한다.
(버클리 DB를 이용할라면 svnadmin create --fs-type bdb sample 실행해줘야한다.)
C:\Documents and Settings\Administrator>cd \

c:\>mkdir repos

c:\>cd repos

c:\repos>svnadmin create sample
그럼 폴더가 sample 폴더에 저장소가 생긴다.
그럼 권한 설정이나 이런걸 해줘야한다.
생성한 저장소 폴더 하위 폴더중에 conf 폴더가 있다.
그럼 authz, passwd, svnserve.conf 3개의 파일이 있는데 세팅을 바꿔줘야한다.

먼저 svnserve.conf 파일을 열어보면 아래와 같은 세팅이 되어있다.
초기에 아래내용은 다 #으로 주석 처리 되어있다 풀어주어야 원하는데로 세팅 가능하다.
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = sample Repository
#익명의 사용자 접근을 막는다.
#접근 가능한 사용자는 쓰기 권한을 준다.
#접근 가능 계정 목록과 비밀번호 관리하는 파일명
#경로 기반 접근 제어를 위한 인증 규칙을 설정하는 파일명
#저장소 이름(프로젝트가 여러개면 꼭 바꿔주자 UID 역활함)

계정을 만든다면 passwd 파일을 열어서 아래와 같이 넣어주자
계정 = 비밀번호
예) test = 1111

authz 파일은 계정의 폴더 접근 권한을 세팅하는데 이건 생략한다.

세팅이 끝나면 매니저를 실행해서 폴더 위치를 설정해주고 Start로 실행하면 된다
(자세한 설명은 http://www.pyrasis.com/ 가면 볼수 있다.)

서버는 세팅이 끝났으면 클라이언트 깔아서 접속하면 된다..
하는 방법은 그닥 어렵지 않으니 클라이언트 설명은 생략한다...
(메뉴도 한글로 나오니 좀 삽질 해보면 답나옴..)
by 널부러 2009. 5. 22. 15:44

에... 혹시 압축하는 일이 있으면 이걸 사용 하면 된다.

zlib 1.2.3 버전 (출처 : http://www.zlib.net/ )

프로젝트 속성에서 ( C/C++ -> 코드 생성 -> 런타임 라이브러리) 설정은
각 컴파일 상태에 따라 세팅 해주어야 합니다.
그래야 충돌 메시지가 나오지 않습니다.

debug   컴파일 : 다중 스레드 디버그(/MTd)
release 컴파일 : 다중 스레드(/MT)

- 기본 파일
zlib.lib  <- Visual Studio 2005에서 LIB Release 컴파일한 lib 파일
zlibd.lib <- Visual Studio 2005에서 LIB Debug 컴파일한 lib 파일
zconf.h   <- minigzip 프로젝트의 헤더파일
zlib.h    <- minigzip 프로젝트의 헤더파일
vc80.pdb  <- debug로 컴파일시 없으면 link4099 에러남..
vc80.idb  <- debug로 컴파일시 없으면 link4099 에러남..

- 내가 만든 파일 - 압축 함수를 class로 구성한것밖게 없음...
zlibManager.cpp 
zlibManager.h

샘플코드는 귀찮아서 안만들련다..
CZlibmanager 클레스에 보면 함수가 딱 2가지 있는데..
그거 사용 하면 된다... 어렵지 않으니까 그냥 쓰면 될듯...

link4099 에러 나는것때문에 pdb,idb 파일을 넣어뒀다...
솔직히 무시해도 되는 에러인데 링크에러는 pragma를 이용해서는 무시가 되지 않는다. -_-;
(참 그지같아 MS 링크 에러도 막아줘야 할꺼 아냐 -_-;)

아무튼 필요하면 쓰기 바란다...

by 널부러 2009. 5. 21. 18:01