c++ - 通过指针成员传递类

标签 c++ class pointers

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

最佳答案

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

关于c++ - 通过指针成员传递类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730933/

相关文章:

c++ - 具有特定值重复次数的第 K 次排列

c++ - C++ 中未初始化变量的值

ios - 尝试创建类的实例时使用未解析的标识符错误

c++ - C++模板类中使用友元函数操作私有(private)变量时出错

c++ - 指向具有 decltype 的函数的指针 vector

C 动态指针数组分配。为什么我可以访问超出范围的元素?

c++ - OpenCV中的C++内存计数

c++ - 是否值得在析构函数中设置指向 NULL 的指针?

java - 从对象中的对象调用对象中的方法

c++ - 为什么/何时使用 (!!p) 而不是 (p != NULL)