나는 아직도 C++을 배우고 있으며 명백한 질문이 있거나 어쩌면 내가 무엇을하려고하는지 모를 수도 있습니다. 나는 행렬 (제대로 작성된 소멸자가있는 클래스)을 가지고 새로운 행렬을 생성하여 새로운 행렬에 대한 참조를 반환하는 함수를 가지고있다. 이 행렬에 수만 번 반복 할 필요가 있으므로 메모리 누수가 없는지 확인해야합니다. 그래서 문제는 다음 행간을 위해 공간을 만들기 위해 더 이상 필요하지 않은 행렬을 어떻게 적절하게 삭제할 수 있는가하는 것입니다. 여기에 내가 누출이없는 얻으려고 코드입니다 :C++ delete reference
이DynamicMatrix<double> x0 = getX0(n);
DynamicMatrix<double>exactU = getExactU(n);
DynamicMatrix<double> b = getB(n) * w;
DynamicMatrix<double> x1 = getX1(x0, b, w, n);
while(!isConverged(exactU,x1,e)){
delete x0; //<<<<< This doesn't work. Nor does delete &x0.
x0 = x1;
x1 = getX1(x0, b, w, n);
}
getX의 각() 메소드 행렬에 대한 포인터를 만들고, 그리고) getX0 (같이 매트릭스에 대한 참조를 반환
DynamicMatrix<double> &getX0(int n){
DynamicMatrix<double>* mat1 = new DynamicMatrix<double>(n * n,1);
for (int i = 1 ; i <= n; i++){
for (int j = 1; j <= n; j++){
mat1->set((i-1)*n +j, 1, 0);
}
}
return *mat1;
}
그러면 포인터가 필요하기 때문에 'delete X0'오류가 발생합니다. '& X0'은 해제 된 포인터가 할당되지 않았다고 말합니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 아니면 완전히 잘못된 것을하고 있습니까? 크기가 너무 크고 반복 횟수가 너무 많으므로 내 큰 하드 드라이브에서 공간이 부족하여 메모리 누출이 많다는 것을 의미합니다. getX()
포인터를 반환하는 경우
하드 드라이브의 메모리 누수로 공간이 부족한 경우 페이징 파일이 너무 커지도록 구성되어 있음을 의미합니다. –