2015-01-31 2 views
-2

하나의 단일 요소를 포함하도록 메모리를 할당하는 데 "int * a = new int" "int * a = new int [5]"는 int 유형의 요소 블록 (배열)을 할당하는 데 사용됩니다. 하지만이 코드"int * a = new int"와 "int * a = new int [5]"의 차이점은 무엇입니까?

int *a=new int; 
for(int i=0;i<4;i++) 
    a[i]=i; 
for(int i=0;i<4;i++) 
    cout<<a[i]<<endl; 

그것은 오류없이 실행하고 올바른 출력을 보여줍니다 실행, 그래서 때 사용해야 할 때 "INT * A = 새로운 INT를 [5]"? 아니면 둘 다 사용면에서 동일합니까? codeblocks에서 gnu C++ 컴파일러를 사용하고 있습니다.

+5

이렇게하면 * 정의되지 않은 동작 *이 발생하며 결과에 의존 할 수 없습니다. 이것은 근본적으로 범위를 초과하는 배열에 액세스하고 있습니다. 당신이 Google 당신이 좋아한다면 다른 게시물 [좋아요 여기] (http://stackoverflow.com/questions/1239938/c-accesses-an-array-out-of-bounds-gives-no-error-why) –

+0

당신은 귀하에게 할당되지 않은 메모리에 접근합니다. 이는 정의되지 않은 동작이며 이러한 유형의 상황은 기본적으로 C++ (및 C) 언어에 고유합니다. – PaulMcKenzie

+0

"int * a;"와 유사합니다. 그런 다음 그것을 사용합니다. 그럴 때까지는 시간이 걸릴 것입니다. –

답변

5

5 개의 정수가 필요합니다. 당신의 C++을 배우기 때문에 물론 당신이

int *a=new int[5]; 

를 사용해야합니다, 약 Undefined Behavior 배울 것이 현명하다.

int을 마치 int[5] 인 것처럼 처리하는 등의 일을하지 않으면 C++에서 사용자를 중지 시키거나 경고 할 수 있습니다.

C++은 이러한 종류의 실수를 추적하도록 설계되지 않았습니다. 당신이 그것들을 만들면, C++은 일어날 일을 약속하지 않는다고 단언합니다. 프로그램을 마지막으로 실행 한 경우에도 다음에 작동하지 않을 수 있습니다.

관련 문제