티스토리 뷰
정말 오랜만에 복귀하자마자 오류 글을 쓸 줄은 몰랐네요.
그래도 옛날에 봤던(?) 오류라 빨리 고치긴 했습니다.
이번에는 다른 분의 SOS요청으로 발견된 오류입니다.
문제 상황
- C++ 언어를 그대로 ObjC파일(.m)에 복붙했는데 이상한 오류가 나요.
- Thread 1: EXC_BAD_ACCESS code=1 오류가 나요
사실 오류 문구만 봐서는 저 문구는 자체는 여러 원인이 있는데
다른 언어와 연결시 발생하였다면 이 가능성도 있구나 정도로 알아두시면 될 것 같습니다.
해결법
- 변수 선언 할때 초기화 혹은 메모리 할당을 해주세요.
- 이게 무슨 말인지는 코드로 보는게 이해가 빠르실겁니다.
아래가 문제가 되었던 코드의 유사판입니다.
실제 에러 발생 코드 유사판
// .h 파일
typedef struct milk{
int date;
} Milk;
// .m 파일
- (void)viewDidLoad {
[super viewDidLoad];
setCat();
}
int setCat(){
Milk *seoul; // 여기 주목
return seoul->date;
}
C 나 다른 언어에서는 저렇게 많이 사용하시는데
실제로 돌리면 아래처럼 오류가 납니다.
샘플은 코드가 짧아서 에러 위치가 잘 보여지는데
저게 좀 많이 길거나 스레드로 돌면 위치가 이상하게 잡히더라고요;;;
실제 프로젝트에서는 아예 메인스레드 위치에서 오류가 났다고 보여주더라고요
(아마 그래서 원인을 다들 몰랐던게 아닐까 생각중입니다.)
그래서 뭐가 문제냐고요?
Milk *seoul; // 눈치채셨나요?
이걸 아래처럼 바꿔주시면 해결되는 경우가 있습니다.
해결법
Milk *seoul = (Milk *)malloc(sizeof(Milk));
그래서 위 처럼 메모리라도 할당을 해주시면
정상적으로 돌아가는 것을 확인할 수 있습니다.
(* 상황에 따라 완전히 초기화를 선언해야 해결되는 경우도 있습니다.)
참고로 저는 해당 타입에 정확한 구조나 초기화 방법을 모르기 때문에 저렇게 했는데
알고 계시면 그걸로 해주시는게 좋습니다.
(초기화까지 해주시는게 제일 좋습니다.)
변수를 선언만 한 상태로 이용하려던것이 문제이기 때문에
그 부분만 해결해주시면 정상적으로 돌아가게 됩니다.
돌아오자마자 오류글을 쓸줄은 몰랐지만
같은 고통을 겪으시는 분들을 위해 정리해봅니다.
그럼 오늘도 파이팅입니다.
'iOS개발 > 기타' 카테고리의 다른 글
Xcode16 라이브러리 빌드 시 느려지는 현상 (0) | 2024.09.26 |
---|---|
double-quoted include in framework header 에러 (0) | 2024.08.02 |
Xcode 함수 설명 작성하기 (문서화 주석)(with. symbol documentation) (0) | 2024.07.31 |
Xcode 빌드 시 Sandbox: xcodebuild(3405) deny 에러 (0) | 2024.07.12 |
IOS 10 is the maximum deployment target for 32-bit targets 에러 (0) | 2024.06.28 |