C++分配内存后是否需要初始化变量?结合矩阵乘法代码的疑问
为什么分配内存后还要将output矩阵元素初始化为0
核心原因分为两点:
- C++的
new运算符对内置类型的默认初始化规则:使用new double[长度]分配数组时,不会主动将内存清零,申请到的内存空间里保留的是之前使用时残留的随机垃圾值。如果直接用这些随机值参与后续计算,得到的结果必然是错误的。 - 矩阵乘法的计算逻辑要求初始值为0:矩阵乘法的每个输出元素,都是多组乘积的累加结果,初始值必须从0开始累加,才能得到正确的乘积结果。如果初始值是随机垃圾值,最终结果会叠加上这些无关的随机数值,完全不符合预期。
额外注意:你贴出的代码片段存在逻辑隐患:代码中给
output.values分配了长度为this->rows * mat_left.cols的新内存,但后续清零循环用的是output原本的size_of_values属性。如果新分配的内存长度和output原有的size_of_values不一致,要么会出现越界访问,要么会有部分新内存没有被清零,依然会导致计算错误。
内容的提问来源于stack exchange,提问作者Raha Moosavi
相关产品推荐
相关产品推荐

