怎么判断一个int型变量是否已赋值或者已初始化
如何判断一个int型变量是否已赋值或者已初始化
如题,
------解决思路----------------------
只有编译期可以(编译器抛警告)
运行时无法判断
------解决思路----------------------
未初始化的值是不一定的,所以上面两种方式肯定不行!
所以于其考虑怎么判断一个值有没有初始化,不好做好每个变量的初始化
------解决思路----------------------
初始化是什么呢?就是你第一次赋予变量一个值,这个值可以是你想要的值,也可以是预防错误发生的值。
第一种比如int PI=3.14,那么你判断是否为3.14就可以。
第二种比如int* p=NULL; 后面使用该变量的时候,判断指针是否为NULL就可以。
如果你也不清楚初始化应该是多少,那么判断是否初始化过就没有意义了。还不如就在你要判断是否初始化过的地方,直接赋给它一个有意义的值。
------解决思路----------------------
这个只有自己的编程意识了,变量最好都初始化,至于初始化的值,不同的应用场景用不同的值
------解决思路----------------------
这个没法判断,及时初始化是个好的习惯
------解决思路----------------------
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
仅供参考:
------解决思路----------------------
判断不了的,靠你自己判断吧
------解决思路----------------------
定义的时候自己赋值好了 int a(1234)这样
------解决思路----------------------
定义的时候自己赋值好了 int a = {1234}这样
------解决思路----------------------
如题,
if(a == 0xcccc) /////这样?
if(a == 0xcdcd)////或者这样?
------解决思路----------------------
只有编译期可以(编译器抛警告)
运行时无法判断
------解决思路----------------------
未初始化的值是不一定的,所以上面两种方式肯定不行!
所以于其考虑怎么判断一个值有没有初始化,不好做好每个变量的初始化
------解决思路----------------------
初始化是什么呢?就是你第一次赋予变量一个值,这个值可以是你想要的值,也可以是预防错误发生的值。
第一种比如int PI=3.14,那么你判断是否为3.14就可以。
第二种比如int* p=NULL; 后面使用该变量的时候,判断指针是否为NULL就可以。
如果你也不清楚初始化应该是多少,那么判断是否初始化过就没有意义了。还不如就在你要判断是否初始化过的地方,直接赋给它一个有意义的值。
------解决思路----------------------
这个只有自己的编程意识了,变量最好都初始化,至于初始化的值,不同的应用场景用不同的值
------解决思路----------------------
这个没法判断,及时初始化是个好的习惯
------解决思路----------------------
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
仅供参考:
windows里常见的内存填充数据含义
* 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory
* 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers
* 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory
* 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger
* 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files
* 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory
* 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
* 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash
* 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory
* 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
------解决思路----------------------
判断不了的,靠你自己判断吧
------解决思路----------------------
定义的时候自己赋值好了 int a(1234)这样
------解决思路----------------------
定义的时候自己赋值好了 int a = {1234}这样
------解决思路----------------------