在 C 中取消引用 NULL 指针
Dereferencing NULL pointer in C
我正在尝试为 2 个长度为 1024 的浮点向量分配内存并用一些数字填充它们。
但是,我收到警告:
取消引用 NULL 指针 'fpVec1',
取消引用 NULL 指针 'fpVec2'
对于for循环中的行。执行没问题,但我不明白警告。我做错了什么吗?
int main(void){
int iLength = 1024;
int i, j;
float *fpVec1, *fpVec2, *fpVec3, *fpVec4;
fpVec1 = (float*)malloc(iLength * sizeof(float));
fpVec2 = (float*)malloc(iLength * sizeof(float));
fpVec3 = (float*)malloc(iLength * sizeof(float));
fpVec4 = (float*)malloc(iLength * sizeof(float));
for (i = 0; i < iLength;i++)
{
fpVec1[i] = ((float)i) + 1024.0;
fpVec2[i] = ((float)i) * 1.7;
}}
编辑:我使用的是英特尔 C++ 编译器 19。警告是在 Visual Studio 2019 专业版中生成的。当我在接受的解决方案中使用 if 语句来检查指针的有效性时,警告消失了。
根据 this post,如果您在实际 使用 指针之前检查 malloc()
返回的值,警告将消失。不幸的是,post 中的答案未被接受。
int main(void)
{
int iLength = 1024;
int i, j;
float *fpVec1, *fpVec2;
fpVec1 = (float*)malloc(iLength * sizeof(float));
fpVec2 = (float*)malloc(iLength * sizeof(float));
if (fpVec1 && fpVec2) {
for (i = 0; i < iLength;i++)
{
fpVec1[i] = ((float)i) + 1024.0;
fpVec2[i] = ((float)i) * 1.7;
}
}
free(fpVec1);
free(fpVec2);
}
我正在尝试为 2 个长度为 1024 的浮点向量分配内存并用一些数字填充它们。 但是,我收到警告:
取消引用 NULL 指针 'fpVec1', 取消引用 NULL 指针 'fpVec2'
对于for循环中的行。执行没问题,但我不明白警告。我做错了什么吗?
int main(void){
int iLength = 1024;
int i, j;
float *fpVec1, *fpVec2, *fpVec3, *fpVec4;
fpVec1 = (float*)malloc(iLength * sizeof(float));
fpVec2 = (float*)malloc(iLength * sizeof(float));
fpVec3 = (float*)malloc(iLength * sizeof(float));
fpVec4 = (float*)malloc(iLength * sizeof(float));
for (i = 0; i < iLength;i++)
{
fpVec1[i] = ((float)i) + 1024.0;
fpVec2[i] = ((float)i) * 1.7;
}}
编辑:我使用的是英特尔 C++ 编译器 19。警告是在 Visual Studio 2019 专业版中生成的。当我在接受的解决方案中使用 if 语句来检查指针的有效性时,警告消失了。
根据 this post,如果您在实际 使用 指针之前检查 malloc()
返回的值,警告将消失。不幸的是,post 中的答案未被接受。
int main(void)
{
int iLength = 1024;
int i, j;
float *fpVec1, *fpVec2;
fpVec1 = (float*)malloc(iLength * sizeof(float));
fpVec2 = (float*)malloc(iLength * sizeof(float));
if (fpVec1 && fpVec2) {
for (i = 0; i < iLength;i++)
{
fpVec1[i] = ((float)i) + 1024.0;
fpVec2[i] = ((float)i) * 1.7;
}
}
free(fpVec1);
free(fpVec2);
}