怎么样判断一个int型变量能否已赋值或已初始化

C语言 码拜 7年前 (2015-11-12) 814次浏览
如题,

if(a == 0xcccc) /////这样?
if(a == 0xcdcd)////或这样?
解决方案:3分
只有编译期可以(编译器抛警告)
运行时无法判断
解决方案:3分
未初始化的值是不一定的,所以上面两种方式肯定不行!
所以于其考虑怎么判断一个值有没有初始化,不好做好每个变量的初始化
解决方案:3分
初始化是什么呢?就是你第一次赋予变量一个值,这个值可以是你想要的值,也可以是预防错误发生的值。
第一种例如int PI=3.14,那么你判断能否为3.14就可以。
第二种例如int* p=NULL; 后面使用该变量的时候,判断指针能否为NULL就可以。
假如你也不清楚初始化应该是多少,那么判断能否初始化过就没有意义了。还不如就在你要判断能否初始化过的地方,直接赋给它一个有意义的值。
解决方案:3分
这个只有本人的编程意识了,变量最好都初始化,至于初始化的值,不同的应用场景用不同的值
解决方案:3分
这个没法判断,及时初始化是个好的习惯
解决方案:3分
其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的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
解决方案:3分
判断不了的,靠你本人判断吧
解决方案:3分
定义的时候本人赋值好了 int a(1234)这样
解决方案:3分
定义的时候本人赋值好了 int a = {1234}这样
解决方案:3分
Quote: 引用 6 楼 zhao4zhong1 的回复:

其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时能否能发现并能否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
页的大小,不一定, 很多都是两页,

解决方案:3分
Quote: 引用 10 楼 a138762698828 的回复:
Quote: 引用 6 楼 zhao4zhong1 的回复:

其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时能否能发现并能否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
页的大小,不一定, 很多都是2k

解决方案:3分
对于一个局部变量来说,给变量分配的存储空间是线程的栈,由于进进出出的人很多,变量的值通常是不确定的。
解决方案:3分
记忆中好多内存泄露也是4k 4k的泄的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样判断一个int型变量能否已赋值或已初始化
喜欢 (0)
[1034331897@qq.com]
分享 (0)