我有一个创建地址的函数,将值连续存储在该地址,然后返回该地址:
double* quadratic(double a, double b, double c)
{
double* solAddr = malloc((size_t)(2 * sizeof(double)));
*(solAddr) = (-b + sqrt(b * b - 4.0 * a * c)) / 2.0 * a;
*(solAddr + 1) = (-b - sqrt(b * b - 4.0 * a * c)) / 2.0 * a;
return solAddr;
}
但是,我收到一条警告,指出Warning C6011 Dereferencing NULL pointer 'solAddr'
. 经过一些在线搜索,我发现我只需要确保solAddr
不是NULL
带有“if”-语句并且警告消失了:
double* quadratic(double a, double b, double c)
{
double* solAddr = malloc((size_t)(2 * sizeof(double)));
if (solAddr != NULL)
{
*(solAddr) = (-b + sqrt(b * b - 4.0 * a * c)) / 2.0 * a;
*(solAddr + 1) = (-b - sqrt(b * b - 4.0 * a * c)) / 2.0 * a;
}
return solAddr;
}
警告真的意味着solAddr
可能NULL
吗?文本似乎另有说明。该代码在有和没有NULL
检查的情况下都有效,但我对这个警告真正试图告诉我的内容感到困惑。