C++类和空数组
C++ class and empty arrays
你好,我尝试为Arduino实现一点机器学习。它还应该在 x86 上运行,以便更轻松地调试和训练它。
不幸的是,有一些问题(我猜是内存(。 如果我尝试使用类似的东西,例如。weights[1][1]
我遇到分段错误。Valgrind 或 gdb 显示内存为空。
我的猜测是layers = new Layer[5];
会导致这个空内存,layers[1] = Layer(preLayer, 10, afunc);
并没有像我期望的那样设置内存。
我找到了一些实现类似Layer& Layer::operator=(const Layer& other) // copy assignment
的提示,但我不明白为什么。我什至试图以这种方式修复它,但这会导致新的问题。
问题: 有没有办法避免"空"层?如果明智的话,我想避免Layer();
和layers = new Layer[5];
。
//afunc is a function
layers = new Layer[5];
Layer *preLayer = &layers[0];
layers[1] = Layer(preLayer, 10, afunc);
层.h
class Layer
{
public:
Layer *preLayer;
float **weights;
int weightSize;
float *biases;
float *neurons;
int neuronsSize;
void (*afunc)(float *);
Layer();
Layer(Layer *input, int outputs, void (*afunc)(float *));
~Layer();
void calculateNeurons();
private:
Layer(const Layer &layertoCopy); // not implemented
};
层.c
Layer::Layer() {}
Layer::Layer(Layer *preLayer, int neuronsSize, void (*afunc)(float *)): preLayer(preLayer), neuronsSize(neuronsSize), afunc(afunc)
{
neurons = new float[this->neuronsSize]();
if(this->preLayer) {
weightSize = (*this->preLayer).neuronsSize;
weights = new float*[this->neuronsSize];
for(int i = 0; i < this->neuronsSize; ++i) {
weights[i] = new float[weightSize];
}
biases = new float[this->neuronsSize]();
}
}
Layer::~Layer()
{
}
使用您的示例代码,
layers[1] = Layer(preLayer, 10, afunc);
你有两个问题。在非默认构造函数中,检查
if(this->preLayer)
您发送了一些不为空的东西,但没有初始化任何内容。
&layers[1] = new Layer(0, 10, afunc);
应该避免这种情况。
但是,如果您创建一个std::vector
而不是 c 样式数组,则可以push_back
新图层,而无需使用指针。
此外,如果要使用指针,请使析构函数适当地delete
指针。
当您编写"layers = new Layer[5]"时,您的图层首先使用默认构造函数创建。也许尝试:
Layer** layers = new Layer*[5];
Layer* prevLayer = nullprt;
for(int i=0;i<5;i++){
layers[i]=new Layer(prevLayer,10,afunc);
prevLayer=layers[i];
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '