VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

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

[复制链接]

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-24 15:45:01 | 显示全部楼层
p是一个指针类型,所以sizeof(p) = 4(在32位系统中)
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-25 10:54:01 | 显示全部楼层
我觉得最好还是在变量定义时显示初始化NULL,或者保证在使用前调用malloc,在32位系统中指针都是4位,指向的数据是未知的,很难判定,C/C++语言本身也没在这方面下工夫,如果你使用一个未初始化的指针或变量,得到的答案是不确定的,这个应该由程序员自己去保证。
回复

使用道具 举报

0

主题

12

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-25 21:36:01 | 显示全部楼层
良好的编程习惯就是指针初始化为NULL,分配空间后检查是否分配成功,释放空间成功后立刻置回NULL,如果是一个多线程共享的指针,再加上操作时的互斥保护;
如此一来,在使用指针的时候只需要检测指针是否指向NULL,就可以知道该指针是否有效了。

而如果抛开以上的前提的话,你所能够做的顶多就是重新定义你的结构体,使得这个结构在某些特定位置处有特定的值,以此为检测的依据,我想应该不会有什么人会真的这样去做吧。
回复

使用道具 举报

0

主题

6

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-13 22:45:01 | 显示全部楼层
sizeof(p)应该行的吧
回复

使用道具 举报

0

主题

6

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-2-14 02:19:17 | 显示全部楼层
那就看编译器的了,若你没有赋值直接用的话,就是野指针了。windows是赋值0xcccccccc,其它环境不好说,也有可能是随机值,这样可能会带来程序或系统崩溃的。还是最好定义指针时,赋初值更保险
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-2-14 10:00:01 | 显示全部楼层
lz是希望系统帮你把指针初始化,释放以后也希望系统替你把指针归为NULL?
可惜,c/c++不提供这样的功能,他们把这个责任交给程序员去控制。
所以养成良好的编程习惯是减少错误的办法。记得定义时和释放时及时把指针置NULL,以后就好判断了。
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-3-1 18:00:01 | 显示全部楼层
函数的代码我可以控制,但是我无法保证其它的程序员在调用我的代码之前对改指针的处理是什么样的,所以我必须对传入的指针做严格的检查,以防止以外,这些可能是其它程序员编写你不能期望其它调用改函数的程序员都按照你想的去做:

LNode *p = NULL;
// 对 p 进行若干次操作,包括创建和使用
free(p);
// 不能期望每一个程序员都会做以下这步
// p = NULL;

回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-15 12:00:01 | 显示全部楼层
给函数一个,判断是否成功的返回值;再写上详细的注释就行了。

LZ不要想的太多。
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-4-16 05:30:01 | 显示全部楼层
我并没有想太多,这种情况应该被考虑进去,这是一个函数健壮性的体现。
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-17 05:45:01 | 显示全部楼层
那你干脆写个自己的函数来处理分配和释放,要求所有程序员只能调用你的函数来分配和释放内存。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表