MSVS 2017:指针无效检查表现不正常

时间:2018-05-15 09:08:52

标签: c pointers null visual-studio-2017

我写了以下“Hello world!” - 级别代码:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main(const int argc, const char *argv[]) {
    double *Bptr = NULL;
    printf("Bptr's current value is: %p\n", Bptr);
    double Barray = 1.02;
    Bptr = &Barray;
    if (Bptr == NULL); {printf("Bptr is still a null pointer: %p\n", Bptr); };
    if (!Bptr); {printf("Bptr is still a null pointer (check 2): %p\n", Bptr); };
    printf("The address of Bptr is: %p\n", Bptr);
    return 0;
}

当我使用Visual Studio 2017构建并运行上述内容时,会产生以下奇怪的输出:

Bptr's current value is: 00000000
Bptr is still a null pointer: 00B3FD58
Bptr is still a null pointer (check 2): 00B3FD58
The address of Bptr is: 00B3FD58

不出所料,这不是我想要的。这是我第一次遇到这个问题。这也是我第一次将MSVS项目作为一个“空项目”,而不是Windows控制台/桌面应用程序,所以我怀疑它可能与此有关。有没有人对可能导致这种行为的原因有任何建议?

2 个答案:

答案 0 :(得分:3)

if语句后面有一个分号,删除它就可以了。 :)

答案 1 :(得分:0)

您在 if 语句后使用分号。这就是为什么,尽管有条件,printf语句总是被执行。并且不需要在花括号后加分号,它什么都不做。

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main(const int argc, const char *argv[]) {
    double *Bptr = NULL;
    printf("Bptr's current value is: %p\n", Bptr);
    double Barray = 1.02;
    Bptr = &Barray;
    if (Bptr == NULL) {printf("Bptr is still a null pointer: %p\n", Bptr); }
    if (!Bptr) {printf("Bptr is still a null pointer (check 2): %p\n", Bptr); }
    printf("The address of Bptr is: %p\n", Bptr);
    return 0;
}