는 I는 C++ 코드해제 된 메모리를 가리키는 참조가 왜 작동합니까?
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
int &a = *p;
delete p;
a = 20;
cout<<a<<" ";
cout<<*p;
return 0;
}
이하 시도로서 출력을 얻었다 :이 해제 된 메모리 또는 어떤 쓰레기 액세스의 결과로서 런타임 에러를 일으킬 수 생각 20 20
. 아마 프로그램에서 메모리 위치가 해제되어서 지금까지 사용되지 않았을 수 있으므로 오래된 값을 유지하면서이 출력을 얻었을 것입니다.
그래서 나는 참조#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
// int &a = *p;
delete p;
// a = 20;
// cout<<a;
cout<<*p;
return 0;
}
를 사용하지 않는 경우도 발생한다고 생각하지만, 0 (다중 실행으로 확인)이 경우에 나는 출력을 얻었다. Reference는 다른 산출물과 관련이 있습니까?
컴파일러 : GCC 버전 4.7.2 (우분투/리나의 4.7.2-2ubuntu1)
이것은 정의되지 않은 동작입니다. – sgarizvi
그것이 효과가있는 것처럼 보입니다. 넌 규칙을 어기고있어. –
좋습니다. 첫 번째 출력 세트를 20으로 가져 오기위한 참조 연결이 없습니다. – user2078670