我有一个名为neuronLayerswhich 类型的成员变量std::vector<Eigen::RowVectorXf*>和另一个名为weightstype的成员变量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]));
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,内存管理是我的一个弱点,所以我可能会遗漏一些非常明显的东西。我只是意识到不小心创建new对象会导致内存泄漏。
当我问这是否安全时,我想知道这是否会导致内存泄漏,或者以某种方式导致其他一些内存错误?如果可以,我如何修改该代码片段以解决此问题?
编辑:
neuronLayers在其他地方与其他期望它是Eigen::RowVectorXf*指针向量而不是Eigen::RowVectorXf对象向量的代码一起使用。显示的片段没有显示这一点。
更好的选择是根本不使用任何动态分配。您不需要new,delete在这种情况下,只需摆脱指针并在您的vectors 中保存实际对象,例如:
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]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |