질문과 답변
소프트웨어 c++에서 배열 크기 초과해도 값이 할당되네요?
2020.05.11 22:20
아래의 프로그램을 컴파일하면 배열 크기를 초과한 공간에 값이 저장되어 있어서 컴파일이 안될 것 같은데 정상적으로 컴파일됩니다. 더욱 놀라운 것은 프로그램을 실행하면 0.84가 정상적으로 출력됩니다. 왜 그럴까요? 참고로 윈도는 아니고 우분투에서 g++로 컴파일했습니다. 윈도가 아니라서 죄송합니다.
#include <iostream>
int main()
{
long long int length3 = 4294967294;
double *array3 = new double[length3];
std::cout << "I just allocated an array of integers of length " << length3 << '\n';
array3[4294967805] = 0.84;
printf("%f\n", array3[4294967805]);
delete[] array3;
return 0;
}
댓글 [3]
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
84032 | 윈 도 우| 별짓을 해봐도 해결이 안 되는 0xc000000e 오류 도와주세요... [17] | toz21 | 1249 | 05-13 |
84031 | 윈 도 우| 윈도우 시작시 스케쥴러로 바탕화면 문서를 삭제 하고 싶습... [1] | 비타 | 431 | 05-13 |
84030 | 하드웨어| 숨겨놓은 파티션 찾아서 복구 하는 방법 좀 알려주세요.. [3] | 평화 | 293 | 05-13 |
84029 | 소프트웨어| KJ_Win10XPE68 빌더 요청해 봅니다. [3] | 대저 | 651 | 05-13 |
84028 | 서버 / IT| 시놀로지 용량 관련 ? [2] | WB | 211 | 05-13 |
84027 | 윈 도 우| HDR영상은 4K 영상에서만 적용이 되나요? [2] | 밸록 | 281 | 05-13 |
84026 | 소프트웨어| 파이어폭스에서 multirow tab을 해주는 걸 찾았는데, 설정... | brucex | 134 | 05-12 |
84025 | 윈 도 우| 윈도우 부팅 오류 메세지 질문드립니다. [3] | 하늘은높고 | 781 | 05-12 |
84024 | 윈 도 우| 윈도우10 64버전 SDD 마이그레이션 관련 [2] | 신세계 | 587 | 05-12 |
84023 | 윈 도 우| 네트워크 관련해서 문의 [1] | 안졸리나? | 281 | 05-12 |
84022 | 기 타| 이글자는 무슨글자인가요? [9] | 구리시 | 1143 | 05-12 |
84021 | 서버 / IT| NAS 프로그램 [11] | 씨케이 | 1078 | 05-12 |
84020 | 윈 도 우| 윈도우10에서 앱스토어 KODI 검색 후에 [2] | 심돌이 | 342 | 05-12 |
84019 | 하드웨어| Openwrt NAS 인식 | 토니 | 241 | 05-12 |
84018 | 소프트웨어| UEFI [3] | 세븐좋아 | 815 | 05-12 |
84017 | 윈 도 우| 부팅시마다 윈10 테마가 풀립니다 [2] | 포포 | 358 | 05-12 |
84016 | 윈 도 우| 크로미움 엣지에서 빠른링크 등록해서 쓰니는분들..혹시 순... [5] | 센시로 | 479 | 05-12 |
84015 | 윈 도 우| 최근에 생성된 파일 목록을 보고 싶습니다 [5] | 솔트 | 304 | 05-11 |
» | 소프트웨어| c++에서 배열 크기 초과해도 값이 할당되네요? [3] | 나는나다 | 219 | 05-11 |
84013 | 윈 도 우| win10 pro 설치를 했는데요, 시스템 구성에 들어가보니,,,,,, [2] | 기억의저편 | 540 | 05-11 |
솔직히 여기서 할만한 얘기는 아닌거 같은데...
굳이 얘기를 해보자면,
동작은 되지만, 자기 것이 아닌 메모리 공간을 건드려서 심각한 에러를 유발할 수 있습니다.
숫자만 굳이 불려서 생각할거 없이
array 크기가 3이라고 하면 0,1,2 의 인덱스만 가질 수 있겠지만,
인덱스 3,4 같은 인덱스에 값을 넣거나 읽어도 읽어집니다.
왜냐하면 거기도 메모리공간은 있으니까요.
단순히 읽기만 한다면 어지간해서는 아예 문제 안생기는데요,
거기에 값을 할당하면 문제가 될 수 있습니다.
다른곳에서 쓰고있던 곳을 건드렸을수도 있으니까요.
기본적으로 쓰레기 값이 들어있거나 다른곳에서 쓰던 값이 들어있습니다.
근데 C/C++에서는 그런걸 점검 안하는데
다른 언어에서는 인덱스 범위 벗어나면 대개 에러 뿜습니다.
그냥 언어특성이니까 그러려니 해야죠.