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