하나의 단일 요소를 포함하도록 메모리를 할당하는 데 "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++ 컴파일러를 사용하고 있습니다.
이렇게하면 * 정의되지 않은 동작 *이 발생하며 결과에 의존 할 수 없습니다. 이것은 근본적으로 범위를 초과하는 배열에 액세스하고 있습니다. 당신이 Google 당신이 좋아한다면 다른 게시물 [좋아요 여기] (http://stackoverflow.com/questions/1239938/c-accesses-an-array-out-of-bounds-gives-no-error-why) –
당신은 귀하에게 할당되지 않은 메모리에 접근합니다. 이는 정의되지 않은 동작이며 이러한 유형의 상황은 기본적으로 C++ (및 C) 언어에 고유합니다. – PaulMcKenzie
"int * a;"와 유사합니다. 그런 다음 그것을 사용합니다. 그럴 때까지는 시간이 걸릴 것입니다. –