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

请问关于 怎么判断指针有没有被分配内存 多谢

2012-03-20 
请教关于 如何判断指针有没有被分配内存 谢谢!例如:structLNode{intdataLNode*next}voidmain(){LNode*p

请教关于 如何判断指针有没有被分配内存 谢谢!
例如:

struct   LNode
{
        int   data;
        LNode   *   next;
}
void   main()
{
        LNode*   p;
        //   目前为止,p   没有被分配内存,
        //   我想在这里判断一下,如何才能知道   p   没有指向对象实例
        if   (   ...   )  
        {
                //   其它操作
        }
}

注:p   !=   '\0 '   和   p   !=   NULL   我都试过,没有用。

[解决办法]
LNode* p=0;声明的时候给0
[解决办法]
free(p);
p=NULL;
[解决办法]
当然,指针在声明的时候最好做一下初始化:
void main()
{
LNode* p = NULL;

因为如果你不初始化的话,有些编译器会自动给它初始化,比如VC会把指针初始化为0xcccccccc
[解决办法]
良好的编程习惯就是指针初始化为NULL,分配空间后检查是否分配成功,释放空间成功后立刻置回NULL,如果是一个多线程共享的指针,再加上操作时的互斥保护;
如此一来,在使用指针的时候只需要检测指针是否指向NULL,就可以知道该指针是否有效了。

而如果抛开以上的前提的话,你所能够做的顶多就是重新定义你的结构体,使得这个结构在某些特定位置处有特定的值,以此为检测的依据,我想应该不会有什么人会真的这样去做吧。
[解决办法]
lz是希望系统帮你把指针初始化,释放以后也希望系统替你把指针归为NULL?
可惜,c/c++不提供这样的功能,他们把这个责任交给程序员去控制。
所以养成良好的编程习惯是减少错误的办法。记得定义时和释放时及时把指针置NULL,以后就好判断了。
[解决办法]
给函数一个,判断是否成功的返回值;再写上详细的注释就行了。

LZ不要想的太多。
[解决办法]
1.严格来说一个系统要统一进行内存的分配和释放的,也就是说有封装好的内存操作函数.
2.还有一个原则是调用函数来保证传入被调用函数参数的有效性。

建议制订一个编程规范。规范才是稳定的保证,单靠一个人的力量是不行的,毕竟开发是一个团队的事情。
[解决办法]
个人觉得这种情况是没有办法判断的,必须由调用函数的人保证传递的指针有效。

类似的情况还包括strcpy,strcat之类的函数,
这样的函数,第二个参数要求传递以 '\x00 '结束的字符串,但是如果你一定要传送无结束符的字符数组进去,函数本身也没办法拒绝,这时就很可能出现计算错误。
责任应该由调用这些函数的人承担。

热点排行