gpt4 book ai didi

c++对象指针在调用对象的函数后丢失

转载 作者:行者123 更新时间:2023-11-28 02:13:45 26 4
gpt4 key购买 nike

<分区>

我定义了矩阵类,并将简化版本放在这里:

// matrix of double type
typedef std::vector< std::vector< double > > dbmatrix;

class MMatrix
{
private:
// matrix with size of rowsNum times colsNum
size_t rowsNum; // number of rows
size_t colsNum; // number of columns

protected:
dbmatrix mMat; // the matrix

public:
// Constructor
MMatrix(size_t m, size_t n, double initVal);

...

// Display matrix in console (unsuitable for large matrix)
void display(void);
};

// initialize a m-by-n matrix with an initial Value
MMatrix::MMatrix(size_t m, size_t n, double initVal)
{
this->rowsNum = m;
this->colsNum = n;

this->mMat.reserve(this->rowsNum);

for (uint i = 0; i < this->rowsNum; i++)
{
dbvector oneRow(this->colsNum, initVal);
this->mMat.push_back(oneRow);
}
}

// Display matrix in console
void MMatrix::display()
{
for (uint i = 0; i < rowsNum; i++)
{
for (uint j = 0; j < colsNum; j++)
{
std::cout << mMat[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}

然后我生成了一个二维指针来接收函数“matrixDiff”的结果

MMatrix** divH = matrixDiff(*V, fwdKer, false);

当我在它之后尝试下面的代码时,奇怪的事情发生了:

(*divH[0]).display();
(*divH[0]).display();

在我执行第一行之前,我的对象指针看起来很正常(图 1) fig1.pointer to a 10-by-10 matrix looks normal第一行成功给出了想要的结果。

但是,在执行第一行之后,第二行(完全相同)抛出访问冲突。调试器指示指针在执行第一行后失去了目标(图 2) fig2. pointer lost its target .

在附加测试中,我尝试了:

divH[0]->display();
divH[0]->display();

还是不行。但是,当我尝试以下代码时:

MMatrix* testMat = divH[0];
testMat->display();
testMat->display();

它完美地工作,这完全让我感到困惑。

此外,我还尝试在我创建的函数“matrixDiff”中显示矩阵:

MMatrix** matrixDiff(MMatrix depthMat, MMatrix ker, bool isDirect)
{
MMatrix* retMat[3];

retMat[0] = filter(depthMat, ker);
retMat[1] = filter(depthMat, (~ker));


...

retMat[0] -> display();
retMat[1] -> display();

retMat[2] = diffMag; // gradient magnitude

return retMat;
}

使用相同的两行命令,它也可以工作!

所以,我现在对 C++ 指针非常困惑。似乎通过对象指针传递结果会改变一些东西,虽然我最初认为它只传递对象的地址。你能指出这里真正的问题是什么吗?谢谢!

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com