我的代码如下:(试图让我的原始代码更简单)
class ExClass {
public:
int check;
ExClass() { }
}
//in main
int main()
{
ExClass *classPtr = new ExClass();
if(classPtr->check == -1)
{
cout<<"check is negative";
}
}
此处变量&#39;检查&#39;没有在构造函数中初始化,所以它应该占用一些垃圾值(据我所知)。
但我的问题是,它总是打印&#34;检查是否定的&#34;。(所以&#39;检查&#39;是-1)
每次都会发生这种情况?如何变量&#39;检查&#39;总是-1?
感谢您的帮助!
答案 0 :(得分:3)
您的check
被称为uninitialized variable:
新手程序员的一个常见假设是,所有变量在声明时都设置为已知值,例如零。虽然对于许多语言来说都是如此,但并非所有语言都是如此,因此存在错误的可能性。诸如C之类的语言使用变量的堆栈空间,为子例程分配的变量集合称为堆栈帧。虽然计算机将为堆栈帧留出适当的空间量,但它通常只需通过调整堆栈指针的值来实现,并且不会将内存本身设置为任何新状态(通常是出于效率问题)。因此,当时该内存的任何内容都将显示为占用这些地址的变量的初始值。
这意味着该值并非随机。但更重要的是,无论以前的事物是什么价值都是&#39;的事情。
另请注意,在调试模式下,某些编译器(如visual c ++)会使用幻数(In Visual Studio C++, what are the memory allocation representations?)初始化未初始化的内存。