질문과 답변
소프트웨어 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 | - | - |
84203 | 윈 도 우| critical process died [1] | 포포 | 134 | 05-24 |
84202 | 윈 도 우| 윈도우10 업데이트 이후 부팅 에러 [3] | 절규하는정 | 569 | 05-24 |
84201 | 하드웨어| 고용량 동영상 시청시 뒤로 갈수록 영상과 소리가 차이가 ... [8] | 파워클래식 | 552 | 05-24 |
84200 | 소프트웨어| 이 프로그램에 사용법은 [4] | 바다속에고래 | 599 | 05-24 |
84199 | 소프트웨어| rufus로 wtg를 만들던 중 "알 수 없는 포맷 "이... [1] | brucex | 564 | 05-24 |
84198 | 소프트웨어| Rainmeter 사용법 | 오월동추 | 348 | 05-24 |
84197 | 소프트웨어| winntsetup의 트윅에 "윈도우 업데이트 차단"을 ... [1] | brucex | 280 | 05-24 |
84196 | 윈 도 우| 윈도우10 업그레이드 후 공장 초기화 불가 [4] | 절규하는정 | 726 | 05-24 |
84195 | 윈 도 우| 윈도우 창이름 변경 [1] | 무서운우리 | 438 | 05-23 |
84194 | 윈 도 우| 32비트 윈도우 사용자 비율? [2] | billy | 547 | 05-23 |
84193 | 윈 도 우| 윈도우 업데이트(Win7) 오류(실패) 문의 [1] | 영감-2 | 436 | 05-23 |
84192 | 하드웨어| Summit Ridge면 바이오스 업뎃을 핮 말라는 이야긴지 확인 ... [1] | brucex | 127 | 05-23 |
84191 | 하드웨어| 블랙박스 마이크로SD 호환 문제 [5] | 라랑 | 593 | 05-23 |
84190 | 소프트웨어| grub으로 부팅하는 하드 디스크를 uefi에서 부팅되게 할 수... [1] | brucex | 304 | 05-23 |
84189 | 윈 도 우| 프로그램 아이콘들이 다 사라졌습니다. [2] | 포포 | 342 | 05-23 |
84188 | 기 타| pc 추천 부탁드립니다. [9] | joyleehk | 372 | 05-23 |
84187 | 윈 도 우| winntsetup으로 하드에 이미지 설치중 오류가 나옵니다. [4] | brucex | 343 | 05-23 |
84186 | 윈 도 우| 비트라커에 대하여 [2] | 포포 | 240 | 05-23 |
84185 | 윈 도 우| 윈도우 업데이트 후 잦은 재부팅이 있을 수 있나요? [2] | brucex | 262 | 05-23 |
84184 | 윈 도 우| c드라이브 파티션 나눈 후 윈도우 재설치.. [3] | AvatarYG | 391 | 05-23 |
솔직히 여기서 할만한 얘기는 아닌거 같은데...
굳이 얘기를 해보자면,
동작은 되지만, 자기 것이 아닌 메모리 공간을 건드려서 심각한 에러를 유발할 수 있습니다.
숫자만 굳이 불려서 생각할거 없이
array 크기가 3이라고 하면 0,1,2 의 인덱스만 가질 수 있겠지만,
인덱스 3,4 같은 인덱스에 값을 넣거나 읽어도 읽어집니다.
왜냐하면 거기도 메모리공간은 있으니까요.
단순히 읽기만 한다면 어지간해서는 아예 문제 안생기는데요,
거기에 값을 할당하면 문제가 될 수 있습니다.
다른곳에서 쓰고있던 곳을 건드렸을수도 있으니까요.
기본적으로 쓰레기 값이 들어있거나 다른곳에서 쓰던 값이 들어있습니다.
근데 C/C++에서는 그런걸 점검 안하는데
다른 언어에서는 인덱스 범위 벗어나면 대개 에러 뿜습니다.
그냥 언어특성이니까 그러려니 해야죠.