请问关于 怎么判断指针有没有被分配内存 多谢
请教关于 如何判断指针有没有被分配内存 谢谢!
例如:
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 '结束的字符串,但是如果你一定要传送无结束符的字符数组进去,函数本身也没办法拒绝,这时就很可能出现计算错误。
责任应该由调用这些函数的人承担。
例如:
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 '结束的字符串,但是如果你一定要传送无结束符的字符数组进去,函数本身也没办法拒绝,这时就很可能出现计算错误。
责任应该由调用这些函数的人承担。