2019-07-20 23:34发布
brucewoo 发表于 2019-6-19 18:01 这就是传说中的野指针啊! LZ 搞C/c++编程的时间不长吧? 你局部指针没初始化,就是说这个指针指向不可预 ...
yuyan 发表于 2019-6-20 09:46 原来这样啊,我印象中都初始化了,这里说的局部指针未初始化就有值是说在初始化语句之前就有值了,只是有 ...
最多设置5个标签!
这就是传说中的野指针啊! LZ 搞C/c++编程的时间不长吧?
你局部指针没初始化,就是说这个指针指向不可预料的地址,而且这个地址可能已经分配给其他变量,或者是还没分配,里面有随机的值。
“如果是溢出的话怎么找到溢出的源头?”
---- 这个不叫溢出。但关于指针的安全,是个经典问题,答案就是没有捷径,只能慢慢找,并且养成良好的编程习惯,尽量在定义指针的同时分配空间,并赋予一个确定的值,例如0 .不分配的话,就在定义指针的时候把指针赋值NULL,这样安全一点,但要是使用了的话还是有问题。
原来这样啊,我印象中都初始化了,这里说的局部指针未初始化就有值是说在初始化语句之前就有值了,只是有个二级指针没有完全释放,不清楚是否别的指针未释放导致这个局部指针也出问题。那如果已经出现野指针了怎么处理呢?
这个二级指针每次都是固定地指向地址0x0092A2A2,但是释放下面的子指针时会报错:跳到HardFault_Handler,报错cannot access memory.
当你你定义一个指针,例如 int* pPointer;
这时它本身的值是随机的,即他指向一个随机的地址,这个地址可能是不合理的,可能是别的变量的,也可能刚好是没有使用的内存的。
如果这时你直接就使用了,例如 *pPointer =123; 这样你就是往这个随机的地址写入了数据,有可能会导致严重的后果。
所以良好的习惯是,定义时马上分配空间。作用域结束时释放该指针。
一周热门 更多>