指针问题

C_coyperson1 2008-12-15 05:35:16
int *a=new int;
a=90;
delete a;
if(a==0)
cout<<"a无指向";
else
cout<<"a有指向";

如何判断一个指针的是否有指向,是把它赋值为0还是NULL。
如下的声明:
int *bb=0;
是表示bb这个指针没有指向任何地方吗?
但是为何当cout<<*bb<<endl;
是会输出时bb中有存储数值呢?知道一个指针相当于一个整型的大小,一定数值。
小弟不明白的是:
如何判断一个指针是否指向。
...全文
116 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
rejoice914 2008-12-15
  • 打赏
  • 举报
回复
学习了!
moolf 2008-12-15
  • 打赏
  • 举报
回复
输出的是有指向,这时候a是野指针,
int *a=new int;
*a=10;
delete a;
a=NULL;
if(a==0)//或者a==NULL
cout < <"无指向";
else
cout < <"有指向";
这样的话就是无指向了。
C_coyperson1 2008-12-15
  • 打赏
  • 举报
回复
写贴子有些匆忙有些错误处出现,对此表示歉意。
但是 int *a=new int;
*a=10;
delete a;
if(a==0)//或者a==NULL
cout<<"无指向";
else
cout<<"有指向";
请问输出什么?
如果输出"无指向"(那就说明我的电脑出问题了,问题也就解决)。
但是输出有指向,那请告诉我如何更改。我的程序错误就出现就在这里,
我为这个问题忙了一下午了。脑袋都打了。请各位指点
Router66 2008-12-15
  • 打赏
  • 举报
回复
指针像怪兽,学好了你就能控制它,学不好你就被它控制......
pony_ml 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 SearchLife 的回复:]
判断指针是否有指向,c++标准写法:
if(a)
{ //没有指向
;
}
else
{
;
}
[/Quote]
严重不同意
觉得这是bool型变量的判断方法
jlccwss 2008-12-15
  • 打赏
  • 举报
回复
对于指针来讲
delete 是对指针指向内存的释放,但是指针本身在栈中还是有值的
它的值并没有因为delete操作而为空
记住,以后new出一个指针后,如果确定这个指针不再使用
一定要先delete,然后再赋FULL

少做一个操作都将成为你程序的恶梦!
SearchLife 2008-12-15
  • 打赏
  • 举报
回复
判断指针是否有指向,c++标准写法:
if(a)
{ //没有指向
;
}
else
{
;
}
SearchLife 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 anglecloudy 的回复:]
int *a=new int;
a=90;
delete a;
a=NULL;//加上这句,不然是野指针,不加的话,下面永远都是有指向
if(a==0)
cout < <"a无指向";
else
cout < <"a有指向";

如何判断一个指针的是否有指向,是把它赋值为0还是NULL。
建议你看一本叫《高质量C++编程指南》的书,上面有详细介绍,最好用NULL

如下的声明:
int *bb=0;
是表示bb这个指针没有指向任何地方吗?
你可以用调试,看一下MEMORY,一般是指向…
[/Quote]

个人认为:
int *a=new int;
a=90;
delete a;
a=NULL;//加上这句,不然是野指针,不加的话,下面永远都是有指向

这里有点不对吧。
int *a=new int; //定义了一个整形指针 已经给他分配了一块内存。a此时就有值了。
再 通过a=90;赋值,则原先分配的内存再没有指针指向了他了。所以这块内存再不能自己没有释放了。
sinux_1983 2008-12-15
  • 打赏
  • 举报
回复
一句话,指针是地址的地址
GreaterHeat 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 AndrewITBOY 的回复:]
《高质量C++编程指南》这个本书 很不错的哦
[/Quote]
里面是详细地讲了指针的注意事项. 有new就有delete,delete之后就要对删除后的指针赋空.
LZ的
int *a = new int;
a = 90;
这样赋值不行哦. <<代码大全>>也不错的.
AndrewITBOY 2008-12-15
  • 打赏
  • 举报
回复
《高质量C++编程指南》这个本书 很不错的哦
nullah 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nullah 的回复:]
C/C++ code
如何判断一个指针的是否有指向,是把它赋值为0还是NULL。
if(ptr == NULL) or if(ptr == 0)

如下的声明:
int *bb=0;
是表示bb这个指针没有指向任何地方吗?
但是为何当cout < <*bb < <endl; //不知道楼主用的什么编译器 我在VS2005下出错 没分配内存取值
是会输出时bb中有存储数值呢?知道一个指针相当于一个整型的大小,一定数值。
小弟不明白的是:
如何判断一个指针是否指向。
判断的话用上面…
[/Quote]
顶3楼
要避免这种情况就释放资源后把指针设为NULL
或者使用auto_ptr
leioman 2008-12-15
  • 打赏
  • 举报
回复
大哥,指向变量,不能指向常量
alexhilton 2008-12-15
  • 打赏
  • 举报
回复
a = 90; //怎么可能
a 是指针啊
jl443960770 2008-12-15
  • 打赏
  • 举报
回复

int *a=new int(90);
//a=90;这是极不理智的,除非你知道这段内存是做什么的
delete a;
if(a==0) //这里用0,用NULL一样
cout < <"a无指向";
else
cout < <"a有指向";
nullah 2008-12-15
  • 打赏
  • 举报
回复

如何判断一个指针的是否有指向,是把它赋值为0还是NULL。
if(ptr == NULL) or if(ptr == 0)

如下的声明:
int *bb=0;
是表示bb这个指针没有指向任何地方吗?
但是为何当cout < <*bb < <endl; //不知道楼主用的什么编译器 我在VS2005下出错 没分配内存取值
是会输出时bb中有存储数值呢?知道一个指针相当于一个整型的大小,一定数值。
小弟不明白的是:
如何判断一个指针是否指向。
判断的话用上面的if就OK
但是有指向不代表一定不会出错
比如 int *a = new int(10);
delete a;
cout << *a << endl;
这时候是可能出错的 因为a指向的内存可能已被其它程序使用
OenAuth.Net 2008-12-15
  • 打赏
  • 举报
回复
int *a=new int;
a=90;
delete a;
a=NULL;//加上这句,不然是野指针,不加的话,下面永远都是有指向
if(a==0)
cout < <"a无指向";
else
cout < <"a有指向";

如何判断一个指针的是否有指向,是把它赋值为0还是NULL。
建议你看一本叫《高质量C++编程指南》的书,上面有详细介绍,最好用NULL

如下的声明:
int *bb=0;
是表示bb这个指针没有指向任何地方吗?
你可以用调试,看一下MEMORY,一般是指向0X000000000
但是为何当cout < <*bb < <endl;
是会输出时bb中有存储数值呢?知道一个指针相当于一个整型的大小,一定数值。
同上,那表示你的0X000000000里面有东西。
小弟不明白的是:
如何判断一个指针是否指向。

明白上面就全明白了。
pony_ml 2008-12-15
  • 打赏
  • 举报
回复

int *a=new int;
a=90; // 这里错误,改变了指针a,前面申请的内存不会被释放。或许应该是*a = 90?
delete a; // 危险,这里a指向的内存已经不是int *a=new int;申请的内存了
if(a==0) // 用null判断比较好,这样可读性强
cout < <"a无指向";
else
cout < <"a有指向";
Jonix 2008-12-15
  • 打赏
  • 举报
回复
上面的代码没崩吗?
a = 90; ??????

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧