2011-10-18 3 views
0

클래스 v에 두 배의 배열을 동적으로 할당합니다. 항목은이 배열의 시작 부분을 가리키는 포인터입니다. , 간격이 3서브 스크립 션 연산자에서 임시 변수 사용 방지

double& v::operator[] (const int n) { 
    return entries[n*spacing]; 
} 

이 첨자 연산자는 컴파일하지만 힙 손상이 발생 될 간격이 난 단지 고려 모든 세 번째 항목에 원하는 경우 나, 예를 들어, 항목을 건너 뛸 수 있습니다. 내 웹 검색을 기반으로 Visual Studio에서 "항목 [n * spacing]"결과를 임시로 저장 한 다음 임시 참조를 반환한다고 생각합니다. 할당 해제 된 메모리에 대한이 참조에 쓸 때 힙 손상이 발생합니다.

해결 방법에 대한 아이디어가 있습니까?

답변

0

Visual Studio는 "항목 [n * 간격]"결과를 임시로 저장 한 다음 임시 참조를 반환한다고 생각합니다.

올바르지 않습니다. entriesdouble entries[]; 또는 double* entries으로 정의하면 entries[i]은 참조를 반환하며 아래 첨자 연산자에 의해 반환되는 참조입니다.

문제의 출처는 다른 곳에서 찾아 볼 수 있습니다. 아마도 n*spacing이 배열 범위 밖에 있거나, 참조 번호에 액세스 할 때까지 전체 entries이 할당 해제 된 것일 수 있습니다.

+0

추가 조사 결과 항목이 유효하지 않음이 나타났습니다. 감사합니다. K-ballo. – Kire321

관련 문제