std::vector
이 일부 불량 코드로 덮어 쓰여지고 있습니다. 데이터은 덮어 쓰지 만 내부 상태는 아닙니다. 나는 이것을 알고있다. 왜냐하면 size()
멤버 함수가 프로그램에 정크 값을 반환하기 때문이다. 그것은 올바르게 초기화됩니다. 내 코드의 다른 곳에서 공통 포인터 버그가 의심된다.C++ - lldb/Xcode에서 std :: vector 객체의 주소를 얻는 방법
Xcode 4.6.2입니다. 벡터의 첫 번째 메모리 위치 (벡터 자체가 아닌 데이터)에 메모리 액세스시 하드웨어 중단 점 (lldb)을 설정하여 덮어 쓰는 부분을 볼 수 있습니다. this에 따르면 먼저 벡터의 주소를 찾아야합니다. 일반적으로 &
연산자를 사용하여 변수의 주소를 가져 오지만, lldb를 사용하면 주소를 반환하지 않고 대신 일종의 요약 문자열을 인쇄합니다. 'EXPR'
(lldb) frame variable &myObject.myVector
(std::vector<double, std::allocator<double> > *) $7 = size=4
를 같은 결과가 있습니다 :
(lldb) expr &myObject.myVector;
(std::vector<double, std::allocator<double> > *) $8 = size=4
은 일반적으로 내가 주소가 인쇄보고 기대를
class myClass {
public:
myClass() : myVector(4) {}
private:
std::vector<double> myVector;
double myDouble;
};
모두가 구축 된 후 임의의 중단 점에서 깨는 후 예를 들어 다음과 같은 일반 데이터 멤버 :
(lldb) frame variable &myObject.myDouble
(double *) &myDouble = 0x0000000125589328
(대신 4)
(lldb) expr std::vector<double, std::allocator<double> > * f = &myObject.myVector; f
(std::vector<double, std::allocator<double> > *) $12 = size=0
제로 크기가 실제로 올바른 벡터를 선택하지 않은 제안이 반환
나는 'expr에'하지만 그 중 하나가 작동하지 않습니다와 변수에 주소를 할당 시도 어쨌든.
어떻게이 벡터의 주소를 얻을 수 있습니까? Xcode의 프레임 변수 목록에서 마우스 오른쪽 버튼을 클릭하고이 벡터의 '메모리보기'를 선택하면 0x0
뷰가 열립니다. 물론 유효하지 않습니다. 벡터는 스택에 할당됩니다. 실제로는 다른 몇 개의 객체 안에 있지만 스택은 모두 생성됩니다.
아니요,은 벡터 내의 데이터 주소를 가져오고 싶습니다. 실제로 덮어 쓰는 것은 아닙니다. 손상되고있는 스택 할당 벡터 객체의 내부 저장소입니다.
디버거에서 볼 수있는 것은 lldb가 도움이되고 사람이 읽을 수 있도록 만드는 것입니다. 그러나 코드에서, 당신은 단지'& myObject.myVector'를 사용할 수 있어야합니다. 'std :: vector * vecPtr = & myObject.myVector; '와 같이 주소를 저장할 변수를 만들 수 있습니다. 그러면 lldb가'vecPtr'로 무엇을하는지 보거나 코드에서 사용할 수 있습니다. –
user1118321
나는 그 변수 아이디어를 시도했지만, lldb가 그것을 출력 할 때 그것도 벡터로 포맷한다. 왜냐하면 그것이 벡터에 대한 포인터라는 것을 알고 있기 때문이다. 아마도 나는 '무효'를 사용해야 만했을 것이다. – meowsqueak