首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎样避免指针变量未初始化带来的异常

2013-12-10 
怎样避免指针变量未初始化带来的错误?书上有这么一道题:下列程序问题,体会使用指针时应该如何避免这个问题

怎样避免指针变量未初始化带来的错误?
书上有这么一道题:下列程序问题,体会使用指针时应该如何避免这个问题?

#include <malloc.h>
using namespace std;

int main(int argc, char* argv[])
{
        int *p;
//int *p=(int *)malloc(4);   //用动态内存分配函数来初始化么?
//int *p=new int;
*p=9;
cout<<"The value a p:"<<*p<<endl;

return 0;
}

两个注释是我的方法,就是声明指针的时候给他分配空间,而不是它默认的oxccccccc.
[解决办法]
Windows下可以用
IsBadReadPtr(), IsBadWritePtr(), IsBadCodePtr(), IsBadStringPtr()
判断
[解决办法]
定义的时候就初始化清空!这个是个编程好习惯!
[解决办法]
int* p = NULL;

引用:
书上有这么一道题:下列程序问题,体会使用指针时应该如何避免这个问题?
#include <malloc.h>
using namespace std;

int main(int argc, char* argv[])
{
        int *p;
//int *p=(int *)malloc(4);   //用动态内存分配函数来初始化么?
//int *p=new int;
*p=9;
cout<<"The value a p:"<<*p<<endl;

return 0;
}

两个注释是我的方法,就是声明指针的时候给他分配空间,而不是它默认的oxccccccc.

[解决办法]
必须初始化啊
不初始化,程序不稳定
[解决办法]
2种方法都是可以的。
[解决办法]
顺便说下,默认的0xCCCCCCCC,这个不是默认的,而是VC的调试版本为了便于你跟踪野指针特意帮你初始化的。在Release中就不是了。
[解决办法]
引用:
顺便说下,默认的0xCCCCCCCC,这个不是默认的,而是VC的调试版本为了便于你跟踪野指针特意帮你初始化的。在Release中就不是了。


也只是vc而已!其他环境不一定的,系统爱给多少就给多少了!
[解决办法]
引用:
Quote: 引用:

顺便说下,默认的0xCCCCCCCC,这个不是默认的,而是VC的调试版本为了便于你跟踪野指针特意帮你初始化的。在Release中就不是了。


也只是vc而已!其他环境不一定的,系统爱给多少就给多少了!

是的。所以提醒lz注意下。
[解决办法]
pclint检查一下基本上就看出来了
[解决办法]
自己小心 
[解决办法]
安全起见,确保已经初始化。 
1)用NULL初始化。
#include <malloc.h>
int main(int argc, char* argv[])
{
     int* p = NULL;
     。。。。。
     if(p){
        ......
     }
     return 0; 
}
2)用有效地址初始化
2.1)变量地址初始化。
#include <malloc.h>
int main(int argc, char* argv[])
{
     int a;
     int* p =&a;
     if(p){
          ......
          free(p);
     }
     return 0; 
}
2.2) 为指针,分配内存。
#include <malloc.h>
int main(int argc, char* argv[])
{
     int* p = malloc(sizeof(int));
     if(p){
          ......
          free(p);
     }
     return 0; 
}

实际上有点多余。



[解决办法]
变量都要初始化一下。。。。。。。。。

养成好习惯。。

int *p=NULL;
[解决办法]
ls正解,定义指针赋空比较好,然后用之前用if语句进行判断。
[解决办法]
我告诉LZ正规公司的方法:
1. 编译后的代码用静态工具检查一下, 这类工具包括pclint, coverity等等
2. 其实现代编译器也都会对这类错误告警, 编译时除了error必须修改外, 所有的warning也尽量做到清0
3. 写测试用例, 使用gcov等工具检查主要代码都被覆盖到


[解决办法]
变量初始化是习惯,你要适应他
[解决办法]
本帖最后由 max_min_ 于 2013-12-07 10:06:14 编辑
引用:
Quote: 引用:

定义的时候就初始化清空!这个是个编程好习惯!
嗯,明白,就是不知道初始化为什么较好而已,难道是楼下提供的初始化为NULL?



一般都是初始化为NULL,你就知道它指向的地址了!可以后面作判断使用!
如果没有初始化的话,它的指向的位置就是不可预知了的!就是后面赋值操作,你也不一定知道成功与否
[解决办法]
  很多公司上班要求warning必须为零的,楼主毕业了就知道了,还是养成好习惯吧。
[解决办法]

热点排行