질문과 답변
소프트웨어 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 | - | - |
6114 | 하드웨어| Q9400 , Asus P5Q 오버클럭에 대한 질문좀요~ [5] | 조조 | 4417 | 02-17 |
6113 | 윈 도 우| 오피스 2013 순정 볼륨판 해쉬코드 찾는법 [4] | 고독한CEO | 4417 | 03-21 |
6112 | 윈도우7 삭제 어떻게 하나요? [5] | 낙타가알낳다 | 4418 | 08-28 |
6111 | 하드웨어| 가젯이나 프로그램 찾습니다. | 김용환 | 4418 | 11-17 |
6110 | 윈 도 우| Windows PE 궁금한 점 [3] | Lucky 7 | 4418 | 04-30 |
6109 | 서버 / IT| 윈도우 서버 2008 R2 버전을 설치 했는데요, 암호 설정을 ... [5] | 예레미야 | 4418 | 04-09 |
6108 | 윈 도 우| 디스플레이끄기 [1] | IS진 | 4419 | 11-17 |
6107 | 소프트웨어| kmplayer 광고창 안뜨게 할순 없나요? [2] | 바람의상처 | 4419 | 11-19 |
6106 | 윈 도 우| 메실님이 만든 윈도우7 64비트 라이트 저사양 | 써나아빠 | 4419 | 01-09 |
6105 | 윈 도 우| 레디부스트 기능 [3] | 블랙데빌 | 4420 | 11-15 |
6104 | 윈 도 우| ghost 실행시 보이지 않는 파티션 [2] | finalone | 4420 | 01-27 |
6103 | 윈 도 우| ati radeon9200 드라이버 win7 32bit 에서 잡으신 분 계신... [4] | mombae | 4421 | 01-02 |
6102 | 윈 도 우| ip가 다른 2대의 PC의 폴더 공유방법 (VPN제외)질문 [1] | 윈도우7xp | 4421 | 03-31 |
6101 | 윈 도 우| 트로이 목마를 당하고 있을 때 아는 방법은? [1] | 길가작은별 | 4422 | 05-27 |
6100 | 소프트웨어| win 8 pro 에서 한글 2010을 실행시 runtime error 문제 [2] | 너무 졸려 | 4422 | 11-01 |
6099 | 윈 도 우| 윈도우7용 프리셀 올려주실분 계신가요? [4] | 별빛지기 | 4422 | 01-12 |
6098 | 하드웨어| intel(r) management engine interface 드라이버 관련.. [2] | bloodsign | 4423 | 12-23 |
6097 | 소프트웨어| acronis true image포터블 사용문의 [1] | 천국문 | 4423 | 08-06 |
6096 | 윈 도 우| win 7 엔터프라이즈는 복구모드 지원 안함 [4] | 우금티 | 4424 | 02-12 |
6095 | 윈7에서 messenger 작업표시줄이 아닌 트레이에 표시하는 ... [2] | 샤샤 | 4425 | 04-18 |
솔직히 여기서 할만한 얘기는 아닌거 같은데...
굳이 얘기를 해보자면,
동작은 되지만, 자기 것이 아닌 메모리 공간을 건드려서 심각한 에러를 유발할 수 있습니다.
숫자만 굳이 불려서 생각할거 없이
array 크기가 3이라고 하면 0,1,2 의 인덱스만 가질 수 있겠지만,
인덱스 3,4 같은 인덱스에 값을 넣거나 읽어도 읽어집니다.
왜냐하면 거기도 메모리공간은 있으니까요.
단순히 읽기만 한다면 어지간해서는 아예 문제 안생기는데요,
거기에 값을 할당하면 문제가 될 수 있습니다.
다른곳에서 쓰고있던 곳을 건드렸을수도 있으니까요.
기본적으로 쓰레기 값이 들어있거나 다른곳에서 쓰던 값이 들어있습니다.
근데 C/C++에서는 그런걸 점검 안하는데
다른 언어에서는 인덱스 범위 벗어나면 대개 에러 뿜습니다.
그냥 언어특성이니까 그러려니 해야죠.