1
2 차원 정수 포인터 필드가있는 간단한 행렬 클래스가 있습니다. 다음과 같은 함수를 여러 번 호출하면 Linux 컴퓨터에서 glibc 오류가 발생합니다. 내가 "otherM.value = '\ 0';" 함수의 끝에이 줄을 추가하면 문제가 해결됩니다. 누군가가 왜이 매달려있는 포인터 문제가 있다고 설명 할 수 있습니까? 클래스가 참조가 아닌 복사본으로 전달 되었습니까? 포인터 구성원은 참조로 전달됩니까?포인터 멤버를 사용하여 클래스 전달
void matrix::sub(matrix otherM)
{
if(dimX!=otherM.dimX || dimY!=otherM.dimY)
return;
int** rowPtr = value;
int** otherMrowPtr = otherM.value;
for(int i=0;i<dimX;i++){
for(int j=0;j<dimY;j++){
(**rowPtr) = (**rowPtr) - (**otherMrowPtr);
(*rowPtr)++;
(*otherMrowPtr)++;
}
(*rowPtr)-=dimY;
(*otherMrowPtr)-=dimY;
rowPtr++;
otherMrowPtr++;
}
rowPtr = '\0';
otherMrowPtr = '\0';
otherM.value = '\0';
}
matrix::matrix(int x, int y){
dimX = x;
dimY = y;
// allocate here
value = new int*[dimX];
int** rowPtr = value;
for(int i=0;i<dimX;i++){
*rowPtr = new int[dimY];
rowPtr++;
}
}
matrix::~matrix(){
if(value!=NULL){
int** rowPtr = value;
for(int i=0;i<dimX;i++){
delete[] (*rowPtr);
rowPtr++;
}
rowPtr-=dimX;
delete[] rowPtr;
rowPtr = '\0';
}
value = '\0';
}
'value'는 클래스에서 어떻게 정의되어 있습니까? 그리고 왜'i'와'j'로 계산하면 모든 포인터 산술 연산을 할 수 있습니까? 훨씬 단순한 루프를 위해서'rowPtr [i] [j]'를 사용할 수 있습니다. –
클래스에'copy constructor','assignment operator','destructor'를 구현 했습니까? – hochl
정수 ** 값; 행렬 클래스의 데이터 필드 인 2d int 포인터입니다. 포인터로 연습 할 때 포인터에 대한 증분 작업을 선택했습니다. 복사본 생성자 또는 할당 연산자가 없습니다. – tartar