그렇다면 두 개의 프로그램을 배치 할 것입니다. 두 가지 모두 포인터와 새 연산자를 사용하는 동적 배열입니다. 그러나 삭제 연산자가 마음에 들지 않는 것 같습니다.C++ 포인터 및 동적 배열 및 삭제 연산자
#include <iostream>
int main()
{
int *p;
p = new int[5];
for (int i = 0; i < 5; i++)
{
p[i] = 25 + (i * 10);
std::cout << p[i] << " ";
}
std::cout << std::endl;
delete [] p;
p = NULL;
return 0;
}
이것이 첫 번째 프로그램입니다. 그것은 삭제 연산자를 좋아한다. 이제 삭제 연산자를 싫어하는 프로그램 :
#include <iostream>
int main()
{
int x;
int *p;
p = new int[5];
*p = 4;
for (int i = 0; i < 5; i++)
{
std::cout << *p << " ";
x = *p;
p++;
*p = x + 1;
}
std::cout << std::endl;
delete [] p;
p = NULL;
return 0;
}
이 프로그램은 정상적으로 컴파일됩니다. 그러나 실행 중에는 에러 주소 -free(): invalid pointer: 0xfdb038
.. 또는 특정 실행을위한 메모리 주소가 무엇이든간에 throw됩니다. 따라서 질문은 다음과 같습니다. 두 번째 경우에 삭제 연산자를 사용할 수없는 이유는 무엇입니까? 나는 메모리 누출을 원하지 않는다; 나는 포인터가 매달려있는 것을 원하지 않는다. 방금 p = NULL;
라고 말하면 p = 0
이지만 포인터가 여전히 매달려 있다고 생각합니까?,하지만 확실하지 않습니다. 미리 감사드립니다. 코드의 두 번째 조각이 루프에서
두 번째 경우에는 'p'포인터를 변경하고 삭제하기 전에 배열 시작을 가리 키지 않기 때문에. –