티스토리 뷰
c언어에서 sizeof 사용할 때 이거 하나는 알아두세요.
제가 오늘 실수한 내용 공유합니다. c언어에서 sizeof는 변수 타입의 메모리 바이트 크기를 구하고자 할 경우 주로 사용하는데요. sizeof(type) 이런식으로 씁니다. 다들 아는 얘기죠. 그러면 바이트 단위의 사이즈를 돌려줍니다. 가령 int a; result = sizeof(a); 라고 하면 result에는 보통 4라는 값이 들어갑니다.
int a[3]; result = sizeof(a); 라고 하면 result 변수에는 정수크기와 배열 크기의 곱에 해당 하는 4 * 3 = 12라는 값이 들어가게 되고요.
포인터를 사용하지 마세요
그런데 종종 실수 할 수 있는게 sizeof에 포인터를 쓸 때입니다. 저도 무심결에 실수했네요. 메모리를 malloc으로 잡아서 포인터로 참조해놓고 그걸 sizeof로 확인해버렸더니 항상 포인터 타입 크기로 반환해서 버그가 생겼네요... (ㅡ..ㅡ)
int *a; result = sizeof(a); 라고 할 때 result는 4라고 포인터의 크기를 반환합니다. 그럼 int *a; a = malloc(12); result = sizeof(a); 이러한 구문에서 result는 어떤 값이 들어갈까요? 전 12가 들어가겠지 하고 무심결에 썼는데, 기대했던 12라는 값이 아니라 4가 들어갑니다.
조금만 생각하면 당연히 포인터 타입에 대한 크기가 들어가는 거죠. 포인터에 얼마의 메모리가 할당되어 있는지는 sizeof는 알 수 없으니까요.
sizeof에 쓰면 안되는 타입
함수 타입, 불완전한 타입, 비트 필드는 sizeof에 쓰면 안됩니다. 포인터 쓸때는 유의해야 하는데 포인터는 포인터의 타입 크기를 반환합니다. 포인터가 참조하는 할당된 메모리 사이즈를 반환하지 않는다는걸 알아두세요~
'잉고래의 코딩' 카테고리의 다른 글
자바스크립트의 객체 정의 3가지 방법 (0) | 2017.04.05 |
---|---|
착한 편집기 비주얼 스튜디오 코드 (4) | 2017.03.30 |
Visual Studio mdf table 저장 오류 해결방법 (0) | 2016.08.10 |
서브라임텍스트3 쌍따옴표 꿀팁 (0) | 2016.07.25 |
c++ 미리 컴파일된 헤더 에러 오류 (0) | 2016.07.25 |
- Total
- Today
- Yesterday
- X1 DASH
- cc2530
- 블로그
- 독서
- 아이나비 패드
- 한빛미디어
- c언어
- 팅크웨어
- 독후감
- 소니 AXP35
- 소니
- HP Pavilion x2
- Sony
- 소니 캠코더
- 아이나비
- 캠코더
- 아이나비 Tab XD9
- 파빌리온 X2
- 서평
- 티스토리
- 아이나비 탭 xd9
- 아이나비 탭 XD11 Pro
- CSS
- 블랙박스
- 아이나비 태블릿
- qxd1000a
- AXP35
- 박근혜
- 소니 핸디캠
- SM5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |