Проходящий класс с указателем - PullRequest
1 голос
/ 16 марта 2012

У меня есть простой матричный класс, в котором есть двумерное поле целочисленного указателя.Когда я вызываю следующую функцию несколько раз, она выдает ошибку glibc на машине с Linux.Когда у меня есть "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';
}

1 Ответ

1 голос
/ 17 марта 2012

Вы реализовали конструктор копирования, оператор присваивания и деструктор для своего класса?Если нет, то иди и реализуй эти , так как ты управляешь ресурсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...