VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4037|回复: 24

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

[复制链接]

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-15 16:00:02 | 显示全部楼层 |阅读模式
例如:

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

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

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-18 21:00:02 | 显示全部楼层
LNode* p=0;声明的时候给0
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-18 23:45:01 | 显示全部楼层
如果我是用 free() 释放的,好像就没有用:

void main()
{
        LNode *p = 0;
        p = (LNode*)malloc(sizeof(LNode));
        free(p);
        if (p == NULL)
        {
                printf("P is NULL\n");
        }
}
回复

使用道具 举报

0

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-19 08:45:01 | 显示全部楼层
free(p);
p=NULL;
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-19 21:27:01 | 显示全部楼层
void main()
{
    LNode* p;
    p = (LNode*)malloc(sizeof(LNode));

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

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

回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-19 22:18:02 | 显示全部楼层
当然,指针在声明的时候最好做一下初始化:
void main()
{
    LNode* p = NULL;

因为如果你不初始化的话,有些编译器会自动给它初始化,比如VC会把指针初始化为0xcccccccc
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-20 17:54:01 | 显示全部楼层
我不是这个意思,我不是想要判断malloc函数是否分配成功,我想判断一个指针是否分配了对象实例,这就要考虑以下情况,比如有一个函数:

int AppendElem(LNode * header)
{
    if ( ... )  // 在这里判断header是不是为空指针
    {
        // 如果是空指针
    }
}

又比如:

int Function(LNode * p)
{
    if ( ... )  // 判断是不是存在对象实例
    {
        // 如果存在对象实例
    }
}

在上面两个函数调用之前,p 指针可能被 malloc 过,也可能没有
回复

使用道具 举报

0

主题

41

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-1-21 11:00:02 | 显示全部楼层
LNode* p=0;声明的时候给0
p = (LNode*)malloc(sizeof(LNode));
if(0 == p){
分配失败
}
一般在指针未使用的时候赋值0表示无效指针。
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-21 17:54:02 | 显示全部楼层
To hzxszmh:

    还是没有明白我的意思,如果是这样:

    LNode* p;
    AppendElem(p);

    p 既没有被赋0,也没有malloc,我现在想要一个能够考虑异常情况的函数入口判断。
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-24 05:18:02 | 显示全部楼层
sizeof(p) 行吗??
回复

使用道具 举报

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

本版积分规则

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

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