如何解决这是释放内存的安全方法吗?
我有一个名为 neuronLayers
的成员变量,其类型为 std::vector<Eigen::RowVectorXf*>
,另一个名为 weights
的类型为 std::vector<Eigen::MatrixXf*>
。
作为前向传播函数的一部分,我需要将这两个向量的值相乘,并保留一个指向该值的指针。我已经确保我要相乘的值的维度大小匹配,所以这里没有问题。
我想出了这个:
for (unsigned i = 1; i < this->topology.size(); i++) {
delete this->neuronLayers[i];
this->neuronLayers[i] = new Eigen::RowVectorXf((*this->neuronLayers[i - 1]) * (*this->weights[i - 1]));
}
不幸的是,内存管理是我的一个弱点,所以我可能会遗漏一些非常明显的东西。我只是意识到不小心创建 new
对象会导致内存泄漏。
当我问这是否安全时,我想知道这是否会导致内存泄漏,或者以某种方式导致其他一些内存错误?如果可以,我该如何修改该代码片段以解决此问题?
编辑:
neuronLayers
在其他地方与其他代码一起使用,这些代码期望它是 Eigen::RowVectorXf*
指针的向量而不是 Eigen::RowVectorXf
对象的向量。显示的代码段没有显示这一点。
解决方法
更好的选择是根本不使用任何动态分配。在这种情况下,您不需要 new
和 delete
,只需去掉指针并在 vector
中保存实际对象,例如:
std::vector<Eigen::RowVectorXf> neuronLayers;
std::vector<Eigen::MatrixXf> weights;
...
for (unsigned i = 1; i < topology.size(); i++) {
neuronLayers[i] = Eigen::RowVectorXf(neuronLayers[i - 1] * weights[i - 1]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。