이 프로그램이 충돌하고 배열 내용 및 포인터 이동과 관련하여 불법적 인 작업을 찾을 수 없습니다. 뭐가 잘못 되었 니?배열의 포인터 이동
#include <iostream>
#include <stdint.h>
using namespace std;
int main(int argc, char ** argv) {
int * p = new int [20];
for(int i=0 ; i<20 ;i++)
{
p[i]=i;
}
for(int i=0 ; i<20 ;i++)
{
printf("%d ",*p);
p++;
}
delete [] p;
return 0;
}
질문 : 왜 처음에 '새'를 사용하고 있습니까? 'p' 배열을'main'에 로컬로 배열 /'std :: vector' /'std :: array'를 만들면 얻게 될 결과를 얻기 위해 많은 추가적인 회전을 할 것입니다. 'new' /'delete'를 충돌로부터 보호하는 방법에 대한 조언을 많이 받았지만, 처음부터 사용하지 말아야한다고 지적한 사람은 없습니다 (그리고'new'와 같은 기능이 필요할 때조차도). 'new'를 직접 쓰는 대신에'make_shared'와'make_unique'를 봐야합니다). –
@JerryCoffin이 대답 해주었습니다. 대개 C++ 책, 리소스, 코스 (심지어 대학의 것들)의 대부분이 C로 링크 된 목록을 구현 한 다음 C++ 컴파일러로 컴파일하는 방법을 선호하기 때문입니다. 사람들은 여전히 다른 사람들에게 "C 게토"(Bartosz Milewski가 이름을 지은 것처럼)를 편안하게 느끼는 법을 가르치고 있습니다. –