Memset 警告根据其第三个参数被视为错误[重复]

问题描述 投票:0回答:1

当在 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];

有谁知道为什么会发生这种情况以及如何减轻这种情况?

我在网上找不到有关此警告/错误的太多信息。

c++ makefile build automake memset
1个回答
-2
投票
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 项的数组可能会导致未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.