함수에 아무 곳이나 pointerToObj = NULL
이 없더라도 개체에 대한 포인터가 NULL로 설정됩니다. 나중에 포인터를 사용하여 액세스 위반 예외를 발생시킵니다. 또한 테스트 포인터를 추가하여 값을 보존할지 여부를 확인했지만 아니요 - 동시에 NULL로 설정됩니다.구조체가 커질 때 벡터의 요소를 가리키는 포인터가 NULL로 설정됩니다.
포인터는 벡터의 객체를 가리 킵니다. 한 시점에서 벡터에 새 객체를 추가하므로 구조가 커집니다. 바로 다음에 포인터가 NULL로 설정됩니다. 나는 이것을 테스트했다. 모든 포인터는 벡터의 특정 요소를 가르키고 새로운 객체를 추가 한 직후에 NULL로 설정된다.
나는 벡터가 작동하는 방식 때문에 이런 일이 일어난다 고 생각합니다. 실수가 아니라면 스택을 기반으로합니다. 스택이 길어지면 더 큰 새로운 배열로 자신을 복사하고 이전 스택을 삭제해야합니다. 그러나 이제 새 배열은 메모리의 다른 위치에 있으므로 포인터가 더 이상 올바른 위치를 가리키고 있지 않습니다.
정말입니까?
'std :: vector'는 설명대로 작동하지 않습니다. 외부 포인터가 NULL로 설정되는 것입니다. 이 동작의 코드를 게시해야합니다. –
포인터가 사실 NULL로 설정되었는지 확인 했습니까? ** 어떻게? ** (최소 코드 예제?) 널 포인터를 역 참조하는 동안 액세스 위반이 발생하지만 (Windows에서는) 그 반대가 사실이 아닙니다. 액세스 위반은 널 포인터가 아닌 모든 유효하지 않은 포인터에서 발생합니다. – MSalters