VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
123
返回列表 发新帖

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

[复制链接]

1

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-21 13:00:01 | 显示全部楼层
void main()
{
    LNode* p = NULL;
    p = (LNode*)malloc(sizeof(LNode));

    if ( NULL == P)
    {
        printf("alloc memory failed.\n");
    }

    if ( ... )
    {
        // 其它操作
    }
    free(p);
    p = NULL;
}

这样就可以了,lz自己深究了吧?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-7 00:45:02 | 显示全部楼层
没办法判断,free(p)以后,p指向的地址是不变的,只是那块地址被回收了。
一般都是free完以后紧跟着置指针为0,判断的时候只要判断p是否为0。
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-7-18 05:15:01 | 显示全部楼层
1.严格来说一个系统要统一进行内存的分配和释放的,也就是说有封装好的内存操作函数.
2.还有一个原则是调用函数来保证传入被调用函数参数的有效性。

建议制订一个编程规范。规范才是稳定的保证,单靠一个人的力量是不行的,毕竟开发是一个团队的事情。
回复

使用道具 举报

0

主题

9

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-19 09:15:01 | 显示全部楼层
个人觉得这种情况是没有办法判断的,必须由调用函数的人保证传递的指针有效。

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

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-2 16:30:01 | 显示全部楼层
没有初始化
LNode*   p   =   NULL;
回复

使用道具 举报

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

本版积分规则

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

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