저는 C# 프로그래머이고 이제 C++을 사용하여 작업을 수행합니다.포인터의 내용이 왜 변경됩니까?
pair<Point,double>* p=NULL;
Sphere* sphere=NULL;
for (int i=0;i<spheres.size();i++)
{
vector<pair<Point,double>> solution=findIntersection(Point(ray.origin),Point(ray.direction.x,ray.direction.y,ray.direction.z),spheres[i]);
if(solution.size()==0)
continue;
if(p==NULL || solution[0].second<p->second)
{
p=&solution[0];
sphere=&spheres[i];
}
}
if(p==NULL)
return backgroundColor;
else
{
Color c=localIlluminate(p->first,*sphere);
return c;
}
내가 원하는 p.first
가장 작은 값을 가지고, 그리고 sphere
는 p
를 얻기 위해 사용되는 cooresponding 구체합니다.
디버깅 후 코드가 작동하지 않습니다. 첫 번째 루프에서 p
의 주소는 solution[0]
이며, 값은 {(0,0), 0}이라고 가정합니다. 그런 다음 루프가 계속되고 i=1
일 때 솔루션 [0]이 {(1,2), 3}이되고 p의 값도 {(1,2), 3}이된다고 가정합니다.
p
값을 변경하지 않을 것으로 예상됩니다. 어떻게 수정해야합니까?
다음 반복에서 사라질 요소에 대한 포인터를 저장합니다 (로컬 벡터가 대체되고 내부를 가리키고 있기 때문에). 포인터 대신 사본을 저장하십시오. –