我在被要求维护的源代码块上运行了一个静态代码分析工具。该工具在以下情况下返回错误:
n = foo1(k);
if (n == -1)
goto err:
i = foo2(k); // k is a pointer to an integer and is allocated on the heap; i is an integer)
memcpy(x,y, i);
该错误表明我可能会被分配一个值 -1,因此 memcpy 可能会导致错误(我可以提供有关如何但它们与此问题无关的详细信息)
函数 foo1 和 foo2 在开头都有以下代码
if (!k)
return -1;
在上面的行中,如果我们到达调用 foo2 的行,我们是否保证 k 不会为空,因为如果它为 NULL,那么 n 将等于 -1,我们永远不会到达调用 foo2。这段代码是在 Linux 上运行在用户空间中的单线程进程的一部分,所以我相信除了这个进程之外,没有其他人可以在 foo1 和 foo2 的执行之间触及 k 指向的内存空间。