질문과 답변
소프트웨어 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 | - | - |
84222 | 윈 도 우| 난감 [13] | FSMG | 914 | 05-25 |
84221 | 윈 도 우| 192.168.0.1 공유기 접속이 연결이 안되요 2번째 질문이에요 [5] | 아킬레스님 | 820 | 05-25 |
84220 | 기 타| 구형 하드디스크 E-IDE (HDD) 방식을 살리려면 --변환 케이... [8] | 우주인 | 1336 | 05-25 |
84219 | 기 타| Adobe Acrobat Pro DC 2020.009.20065 인증이 안되네요. [11] | Day | 1559 | 05-25 |
84218 | 윈 도 우| 관리자권한얻기 REG관련 질문입니다. [3] | 27언더 | 363 | 05-25 |
84217 | 서버 / IT| 나스를 허브 용도로도 사용가능할까요? [2] | 윈포우도럼 | 346 | 05-25 |
84216 | 윈 도 우| 배치파일 만들고 있는중에 질문드립니다 고수님들 도와주세요~ [2] | it햇병아리 | 224 | 05-25 |
84215 | 윈 도 우| 윈도우 관리자 계정으로 설치 [3] | 신세계 | 613 | 05-25 |
84214 | 윈 도 우| 192.168.0.1 로 공유기 접속이 안되네요 [4] | 아킬레스님 | 707 | 05-25 |
84213 | 소프트웨어| 윈투고에 활용용도가 궁금합니다 [7] | 바다속에고래 | 618 | 05-25 |
84212 | 모 바 일| USB에 끼우는 Micro SD가 Raw 생겼어요. [7] | 토니™짱야 | 582 | 05-24 |
84211 | 윈 도 우| Grub2Win 2.1.3.7 설치 후 부팅 메뉴 변경 [2] | 햇님 | 252 | 05-24 |
84210 | 윈 도 우| 윈도우 버전 2004로 업그레이드 후 탐색기의 수정한 날짜 [1] | 버그 | 500 | 05-24 |
84209 | 소프트웨어| grub2win를 grub4dos로 구성된 하드에 설치해도 됩니까? [2] | brucex | 165 | 05-24 |
84208 | 하드웨어| 본체 여러개를 키보드/마우스 1개로 연결이 가능한가요? [5] | 아킬레스님 | 525 | 05-24 |
84207 | 윈 도 우| 맞는건가요 ? [2] | 토끼다 | 336 | 05-24 |
84206 | 하드웨어| acpi라는 장치드라이버가 설치에 문제가 있다는데요 [6] | brucex | 526 | 05-24 |
84205 | 윈 도 우| 시스템복원 [3] | 포포 | 576 | 05-24 |
84204 | 윈 도 우| diskpart를 사용하여 BIOS와,UEFI 멀티 부팅 WTG 만드는 방... [4] | 밤톨이 | 482 | 05-24 |
84203 | 윈 도 우| critical process died [1] | 포포 | 134 | 05-24 |
솔직히 여기서 할만한 얘기는 아닌거 같은데...
굳이 얘기를 해보자면,
동작은 되지만, 자기 것이 아닌 메모리 공간을 건드려서 심각한 에러를 유발할 수 있습니다.
숫자만 굳이 불려서 생각할거 없이
array 크기가 3이라고 하면 0,1,2 의 인덱스만 가질 수 있겠지만,
인덱스 3,4 같은 인덱스에 값을 넣거나 읽어도 읽어집니다.
왜냐하면 거기도 메모리공간은 있으니까요.
단순히 읽기만 한다면 어지간해서는 아예 문제 안생기는데요,
거기에 값을 할당하면 문제가 될 수 있습니다.
다른곳에서 쓰고있던 곳을 건드렸을수도 있으니까요.
기본적으로 쓰레기 값이 들어있거나 다른곳에서 쓰던 값이 들어있습니다.
근데 C/C++에서는 그런걸 점검 안하는데
다른 언어에서는 인덱스 범위 벗어나면 대개 에러 뿜습니다.
그냥 언어특성이니까 그러려니 해야죠.