首页 > 解决方案 > 为什么未初始化的内存位置的值是-842150451?

问题描述

我在搞乱内存分配。我正在测试看到,就像 Java 一样,这个程序给出了一个异常。

int main() {
    int* a = nullptr;
    int b = *a;
    std::cout << b;
}

确实如此。然后我测试了 usingmalloc作为指向 的指针a,但没有初始化 a.

int main() {
    int* a = (int*) malloc(sizeof(int));
    int b = *a;
    std::cout << b;
}

然而,它并没有抛出异常,而是在 -842150451 中打印出一个看似随机的数字。我什至尝试用 long 替换 int:

int main() {
    long* a = (long*) malloc(sizeof(long));
    long b = *a;
    std::cout << b;
}

但是我得到了相同的结果。然后我用简短的方式尝试了它:

int main() {
    short* a = (short*) malloc(sizeof(short));
    short b = *a;
    std::cout << b;
}

然后我得到了-12851,而不是之前的结果。对于我能想到的每一种原始类型,它都像这样继续下去。我想知道的是,这些数字来自哪里以及为什么这些数字具体?

标签: c++memorynullmalloc

解决方案


-842150451是 value 的二进制补码表示0xCDCDCDCD,它是堆分配的未初始化内存的常见 Visual Studio 调试器值。

从 C++ 规范的角度来看,未初始化的变量或内存具有不确定的值,使用这些值会导致未定义的行为。如果你记得这一点,并且总是初始化这样的值或内存,那么你会没事的。


推荐阅读