여기에서 N 번째 계층 구조를 만들려고하지만 내부 클래스의 외부 클래스를 가리키고 액세스 위반 오류가 발생합니다. 그러나 후자의 버전이 작동합니다.외부 클래스 C++을 가리키는
내 실수는 무엇입니까? 새로 생성 된 inner-loops의 범위에 관한 것입니까? 그러나 그것들은 문제가되어서는 안된다.
// atom.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
class a
{
public:
int x;
a * inner;
a * outer;
a(int n) //creates an inner a
{
n--;
x=n;
if(n>0){inner=new a(n);}else{inner=NULL;}
inner->outer=this;//Unhandled exception at 0x004115ce in atom.exe: 0xC0000005:
//Access violation writing location 0x00000008.
}
};
int main()
{
a * c=new a(5);
a * d=c;
while((d->inner)) //would print 4321 if worked
{
std::cout<<d->x;
d=d->inner;
}
getchar();
delete c;
d=NULL;
c=NULL;
return 0;
}
하지만이 작동합니다 : 당신은
// atom.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
class a
{
public:
int x;
a * inner;
a * outer;
a(int n) //creates an inner a
{
n--;
x=n;
if(n>0){inner=new a(n);inner->outer=this;}else{inner=NULL;}
//works without error
}
};
int main()
{
a * c=new a(5);
a * d=c;
while((d->inner)) //prints 4321
{
std::cout<<d->x;
d=d->inner;
}
getchar();
delete c;
d=NULL;
c=NULL;
return 0;
}
생각하십니까 그들은 모두 난 그냥 C를 삭제 자동 h 제하십시오 있습니까?
이런 종류의 자동 * 삭제 기능이 의심 스러우면 어떻게 될까요? –
그들은 NULL에 도달 할 때까지 자동으로 destruting을 시작합니까? 아마도? –