使用指针成员传递类

时间:2012-03-16 02:13:44

标签: c++ class pointers

我有一个简单的矩阵类,其中有一个2d整数指针字段。当我多次调用跟随函数时,它在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';
}

1 个答案:

答案 0 :(得分:1)

您是否为您的类实现了复制构造函数,赋值运算符和析构函数?如果没有那么go and implement those,因为您正在管理资源。