当在 AutoMake Makefile 上没有
AM_CXXFLAGS += -Wno-memset-elt-size
的情况下构建时,我收到此错误:
error: ‘memset’ used with length equal to number of elements without multiplication by element size [-Werror=memset-elt-size] memset (_floatOptions, 0, sizeof(_floatOptions));
这是触发它的行:
memset (_floatOptions, 0, sizeof(_floatOptions));
这是相关代码:
class random_class
{
public:
enum FloatOption
{
numFloatOptions
};
/// Set a float option value
/// @param f Float Option
/// @param value value to be set
void setFloatValue(FloatOption f, double value)
{
_floatOptions[f] = value;
_isSetFloat[f] = true;
}
/// Return value of an float option
/// @param f Float Option
/// @return HostPlacement
double getFloatValue(FloatOption f) const
{
return _floatOptions[f];
}
private:
double _floatOptions[numFloatOptions];
有谁知道为什么会发生这种情况以及如何减轻这种情况?
我在网上找不到有关此警告/错误的太多信息。
class random_class
{
public:
enum FloatOption
{
numFloatOptions = 1 // or any other non-zero value
};
// ... other code ...
private:
double _floatOptions[numFloatOptions];
// ... other code ...
};
// ...
// Initialize _floatOptions using memset
memset(_floatOptions, 0, sizeof(_floatOptions));
如果您故意将
numFloatOptions
设置为 0,您应该评估数组大小以及它在类中的使用方式,因为具有 0 项的数组可能会导致未定义的行为。