C Visual studio“;取消引用空指针“;警告
我有一个函数,它创建一个地址,在该地址连续存储值,然后返回地址:C Visual studio“;取消引用空指针“;警告,c,memory,sal,C,Memory,Sal,我有一个函数,它创建一个地址,在该地址连续存储值,然后返回地址: 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 *
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;
}
但是,我收到一条警告,指出警告C6011取消引用空指针'solAddr'
。在一些在线搜索之后,我发现我只需要使用“if”-语句确保solAddr
不是NULL
,警告就会消失:
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
检查的情况下都可以工作,但是我不清楚这个警告到底想告诉我什么。是的,这个警告是存在的,因为malloc
可能会在分配失败时返回NULL
它实际上是应用于库标题的注释发出的警告,而不是VisualStudio本身。您应该始终检查malloc
返回值的NULL
并对其进行处理,因为malloc
如果失败,可能会返回NULL
。我通常的方法是:
space = malloc(SIZE);
if(NULL == space)
{
goto cleanup;
}
use(space);
cleanup:
free(space);
space = NULL;
阅读:此警告表示您的代码取消引用了一个可能为空的指针。那么,这就解决了它。我可能应该先看一下文件。无论如何谢谢你@SeanXie“警告是否真的意味着solAddr可能为空”是的,这就是表示失败的方式。如果您的“文本声明其他”,则该文本不完整或完全错误。