学习笔记 unsigned 变量 局部变量 数组溢出

本文探讨了在C/C++编程中,unsigned类型变量可能导致的数组越界问题。当元素为空且未分配空间时,GetLength()返回0,导致element[-1]访问未知内存,引发程序崩溃。此外,文章还指出在for循环中,当int类型的负数与unsigned int混合使用时,会发生类型提升,可能导致巨大的循环次数。最后,作者提到了局部变量可能存在的隐患。
摘要由CSDN通过智能技术生成
数组溢出问题:
unsigned int k;
/*
//codes
*/
k=element.GetLength()-1;//返回值是unsigned int;
for(int i=0;i<k;++i)

.......

其他代码


cout<< element[element.GetLength()-1]<<endl;//输出最后一个

如果element 为空,没有申请空间,那么GetLength()返回0; 那么elenment[-1]这会造成指向未知的内存空间,造成程序崩溃。


unsigned int 和Int  变量类型提升

隐藏的程序问题:k=-1;-1在计算机里表示:0xffffffff(unsigned int 值是42496729)。

for()循环中,int 遇到 usigned int ,提升为unsigned int ,所以for语句结果是for(i=0;i<42496729;++i)。



局部变量问题


函数体里的局部变量,例如char Buf[10]一定要记得先给其附上初值。定义的时候最好这样定义 char Buf[10]={0},因为在release 版本下,编译器会优化我们的代码,不服初值有可能造成变量的值混乱。从而导致在debug下逻辑也正确,调试也正确,可一发布,就会造成想不到的意外。在做值的返回时,一定要注意你申请的空间的生命周期,返回一个临时变量就不好了......
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值