我正在尝试修复 checkmarx 工具扣除的漏洞。下面是与我目前正在处理的项目类似的示例代码,该项目在堆栈变量上引发内存泄漏和释放内存。
内存在被调用函数中分配,在 Main 函数中删除。
如果 sum 在 main 函数中分配,则不会有任何内存泄漏或堆栈变量上的内存空闲。但是我不能在我的实际代码中做同样的事情,它涉及一些其他变量来确定分配前指针变量的大小。
void addition(int *a, int *b, int** sum)
{
*sum = new int[2]; //MEMORY LEAK is thrown here
if (*sum)
{
for (int i = 0; i < 2; i++)
{
cout << "Enter two numbers: " <<endl;
cin >> a[i] >> b[i];
(*sum)[i] = a[i] + b[i];
cout << "sum:" << (*sum)[i] << endl;
}
}
}
int main()
{
int* p1 = NULL;
p1=new int[2];
int* p2 = NULL;
p2 =new int[2];
int *sum = NULL; //MemoryFree_On_StackVariable is thrown here
addition(p1 ,p2, &sum);
for (int i = 0; i < 2; i++)
{
cout << "sum is " << sum[i] << endl;
}
if (p1)
{
delete[] p1;
p1 = NULL;
cout << "p1 is deleted" <<endl;
}
if (p2)
{
delete[] p2;
p2 = NULL;
cout << "p2 is deleted" <<endl;
}
if (sum != NULL)
{
delete[] sum;
sum = NULL;
cout << " sum is deleted" << endl;
}
return 0;
}
我该如何纠正这个漏洞?这些漏洞是否正确抛出?应该在同一个函数中分配和删除内存吗?