제 3 행에서 무엇을하고 있는지 말해주십시오.해제 된 포인터가 할당되지 않았습니까?
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
제 3 행에서 무엇을하고 있는지 말해주십시오.해제 된 포인터가 할당되지 않았습니까?
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
*p++=0;
이런 의미
sizeof(int)
제로 바이트 p
에 저장된 주소.p
의 값을 sizeof(int)
만큼 증가시킵니다.즉, 포인터를 증가 시켰으며 delete
에 전달하는 값은 연산자 new[]
과 같은 값이 아닙니다.
@FredLarson도 언급했듯이 배열을 삭제하려면 delete [] p;
을 사용해야합니다.
또한 포인터, 포인터 연산 및 사전/사후 증가를 읽는 것이 좋습니다. Definitive C++ Book Guide and List에서 책을 선택하십시오.
그리고 포인터 값이 정확하더라도, 그것은'delete [] p;'이어야합니다. –
고마워. 그리고 당신 말이 맞습니다. 저는 증분의 순서를 이해하지 못하고 여기서 할당합니다 ... – Arch1tect
글쎄, 이제 너는 그렇게까지 갔다. 8v) 나는 자러 갔다. –
p [0]을 0으로 설정하고 포인터를 p [1]로 지정합니다. 너 뭐하려고?
배열의 첫 번째 요소는 0으로 설정되고 p는 두 번째 요소를 가리 키도록 1 씩 앞당겨집니다.
delete p; // this has undefined behaviour
대신 delete [] p;
을 사용하십시오.
그 다음에 나오는 줄이 더 염려되어야합니다. – chris
뭐하는거야? 두려운 정의되지 않은 동작을 호출합니다. 비강 악의 위험이 높을 준비를하십시오. – dmckee