gpt4 book ai didi

c - memset 导致数组下溢,如何检测

转载 作者:行者123 更新时间:2023-11-30 20:06:15 27 4
gpt4 key购买 nike

最近我注意到这种错误:

#define ELEMENTS 20
BOOL array[ELEMENTS];

void foo()
{
memset(array,0, ELEMENTS); /* BOOL isn't 1 byte but 4 bytes long */
}

如何检测 memset 下溢?大多数静态、动态分析器只能发现溢出。 PVSStudio 就是其中之一。 http://www.viva64.com/en/d/0101/print/ .

有任何免费/开源的替代方案(最好是 Windows,但 Linux 也可以)?Visual Studio 2012 分析 - 失败。Clang 分析器 - 失败。Cppcheck - 失败。

最佳答案

如果没有像 Valgrind 这样的外部工具,您就无法检测到这一点,但您可以避免检测它。

缩放到数组元素的大小:

memset(array, 0, ELEMENTS * sizeof array[0]);

或者,如果您可以确保 array 不是指针(根据您的代码片段),只需执行以下操作:

memset(array, 0, sizeof array);

避免这种情况的最简单方法是在定义时初始化所有变量:

BOOL array[ELEMENTS] = {0};

关于c - memset 导致数组下溢,如何检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com