1
我有一個簡單的矩陣類,其中有一個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';
}
如何在課堂上定義「價值」?爲什麼所有的指針算術,如果你用'i'和'j'來計算呢?你可以使用'rowPtr [i] [j]'來獲得更簡單的循環。 – 2012-03-16 02:19:26
你是否爲你的類實現了'copy constructor','assignment operator'和'destructor'? – hochl 2012-03-16 02:20:55
int **值;是2d int指針,它是矩陣類的數據字段。只是爲了練習指針,我選擇了指針上的增量。我沒有複製構造函數或賦值運算符。 – tartar 2012-03-16 02:36:36