질문과 답변
소프트웨어 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 | - | - |
84135 | 소프트웨어| 푸바2000을 실행 하면 소리가 않나와요.. [1] | 테츠로 | 201 | 05-19 |
84134 | 윈 도 우| 윈도 재설차중 인터넷연결이 안되네요. [2] | brucex | 270 | 05-19 |
84133 | 소프트웨어| 확장프로그램 연결? [2] | 테츠로 | 224 | 05-19 |
84132 | 하드웨어| 모니터 3개를 연결했더니 ..... | 눈이 | 477 | 05-19 |
84131 | 기 타| 혹시 어도비cs6 mac용 소장하신분 계신가요? | 카니발 | 224 | 05-19 |
84130 | 윈 도 우| 윈도우 자체 이퀄라이저는 파일로 저장할 수가 없나요? | Fivernova | 99 | 05-19 |
84129 | 소프트웨어| 무설치 포토샵 필터설치하는 방법? [2] | 슈머슈마 | 327 | 05-19 |
84128 | 윈 도 우| PE 트레이 한글 입력기 표시 중복 [15] | 배추보쌈 | 531 | 05-19 |
84127 | 소프트웨어| 가상머신 VirtualBox에서 전체화면 보기가 안됩니다ㅠㅠ [3] | 한걸음 | 248 | 05-19 |
84126 | 윈 도 우| 윈도우 기본정보 보기에서 이미지를 없애는 방법? [5] | 한걸음 | 204 | 05-19 |
84125 | 윈 도 우| 특정 프로그램의 폴더접근 차단방법 질문이요. [2] | 빠닥 | 261 | 05-19 |
84124 | 기 타| 컴 부팅시간 [6] | 홍낄똥 | 509 | 05-19 |
84123 | 윈 도 우| 윈10 일부계정에 문제가 있습니다 [2] | 포포 | 243 | 05-19 |
84122 | 모 바 일| SAMSUNG NOTES (삼성노트) 를 PC에서 편집할수 았는지요? [5] | 아담1008 | 847 | 05-19 |
84121 | 기 타| tv 무료시청 프로그램 [11] | FSMG | 1924 | 05-19 |
84120 | 소프트웨어| 바탕화면 단축 아이콘이 사라 졌어요.. [2] | 테츠로 | 353 | 05-19 |
84119 | 기 타| tv 시청 [4] | 홍낄똥 | 606 | 05-19 |
84118 | 윈 도 우| 질문입니다. 윈도우 탐색기에서 파일복사나 파일이름 변경... [12] | 크림화이트 | 1362 | 05-19 |
84117 | 하드웨어| 모니터 [5] | 개척자 | 395 | 05-19 |
84116 | 윈 도 우| windows 10 20H1 2004 버전에서 윈도우 미디어 플레이어가 ... [4] | 난소리요 | 534 | 05-19 |
솔직히 여기서 할만한 얘기는 아닌거 같은데...
굳이 얘기를 해보자면,
동작은 되지만, 자기 것이 아닌 메모리 공간을 건드려서 심각한 에러를 유발할 수 있습니다.
숫자만 굳이 불려서 생각할거 없이
array 크기가 3이라고 하면 0,1,2 의 인덱스만 가질 수 있겠지만,
인덱스 3,4 같은 인덱스에 값을 넣거나 읽어도 읽어집니다.
왜냐하면 거기도 메모리공간은 있으니까요.
단순히 읽기만 한다면 어지간해서는 아예 문제 안생기는데요,
거기에 값을 할당하면 문제가 될 수 있습니다.
다른곳에서 쓰고있던 곳을 건드렸을수도 있으니까요.
기본적으로 쓰레기 값이 들어있거나 다른곳에서 쓰던 값이 들어있습니다.
근데 C/C++에서는 그런걸 점검 안하는데
다른 언어에서는 인덱스 범위 벗어나면 대개 에러 뿜습니다.
그냥 언어특성이니까 그러려니 해야죠.