클래스 포인터 벡터를 정렬하는 함수를 작성하고 있습니다. 는 이러한 포함, 정렬 후std :: sort를 사용하여 포인터 벡터를 정렬하면 주소가 뒤죽박죽이됩니까?
{0x784170, 0x7841a0, 0x784050, 0x783f10, 0x783f40, 0x7832a0, 0x7832d0, 0x7831a0, 0x7831d0, 0x783080, 0x7830b0, 0x782f40, 0x782f70, 0x7827c0, 0x7827f0}
: 정렬하기 전에 벡터는 다음 포인터를 포함
{0x3141954a38, 0x3141954a38, 0x784050, 0x783f10, 0x783f40, 0x7832a0, 0x7832d0, 0x7831a0, 0x7831d0, 0x783080, 0x7830b0, 0x782f40, 0x782f70, 0x7827c0, 0x80}
는 IS 다음 내 코드 :
bool DNodeComparator(DNode* x, DNode* y)
{
return x->getDFN() < y->getDFN();
}
void sortFunction(){
vector<DNode*> operations = ApplicationGraph.getOperations();
std::sort(myvector.begin(), myvector.end(), mycomparator);
}
class DGraph
{
private:
vector<DNode*> Nodes;
public:
vector<DNode*> getOperations(){return Nodes;}
};
코드는 종속성에서 실행 그래프는 DNode * 객체의 벡터를 포함합니다. 이 포인터 벡터를 반환하고 DFN 필드로 각 노드를 정렬합니다. DNode 클래스는 Operation * 객체, 일부 부울 플래그 및 종속성 그래프의 깊이 우선 번호 매기기를 계산하기위한 int 값을 포함합니다. 첫 번째 줄에 표시된 주소는 std::sort
호출 바로 전에 gdb print operations
호출의 결과입니다. 두 번째 줄의 주소는 std::sort
바로 뒤에 print operations
전화입니다.
몇 가지 디버깅 단계를 시도했지만 여전히이 오류를 조정할 수 없습니다. DNode *의 벡터를 반환하면 별도의 주소에 저장된이 벡터의 원하는 복사본이 만들어 지므로이 새로운 벡터를 수정하면 (예 : 더 많은 DNode 추가) 그래프 클래스의 실제 벡터가 수정되지 않습니다. 벡터에 여전히 각 DNode *가 포함되어 있어도 이로 인해 문제가 발생하지 않아야합니다.
정확한 붙여 넣기는'{some pointers}'의 자리가 아닙니다. –
코드에 문제가 있다고 생각하지만 여기에 표시된 코드는 아닙니다. –
'{some pointers} '중 일부는 실제로 삭제 된 (로컬) 객체를 가리켜 저장소가 재사용되고 있다고 생각합니다. – molbdnilo