指针未设置为NULL(C)

指针未设置为NULL(C),c,pointers,struct,null,C,Pointers,Struct,Null,我试图弄清楚如何在函数中将结构指针设置为NULL。这是我的密码 struct object { char* name; int type; }; struct object* createObject(char* new_name, int new_type) { struct object* new_object = (struct object*) malloc(sizeof(struct object)); new_object->name = (

我试图弄清楚如何在函数中将结构指针设置为NULL。这是我的密码

struct object
{
    char* name;
    int type;
};

struct object* createObject(char* new_name, int new_type)
{
    struct object* new_object = (struct object*) malloc(sizeof(struct object));

    new_object->name = (char*) malloc(sizeof(char) * (strlen(new_name) + 1));

    strcpy(new_object->name, new_name);
    new_object->type = new_type;

    return new_object;
}

void freeData(struct object* clearedObject)
{
    free(clearedObject->name);
    clearedObject->name = NULL;
    clearedObject->type = 0;
}

void freeObject(struct object* deadObject)
{
    free(deadObject);
    deadObject = NULL;
}

int main(void)
{
    struct object* my_object = createObject("Test", 1234);

    printf("Pointer to Object: %p\n", my_object);
    printf("Pointer to Name  : %p\n", my_object->name);
    printf("Name: %s\n", my_object->name);
    printf("Type: %d\n", my_object->type);
    printf("\n");

    freeData(my_object);

    printf("Pointer to Object: %p\n", my_object);
    printf("Pointer to Name  : %p\n", my_object->name);
    printf("Name: %s\n", my_object->name);
    printf("Type: %d\n", my_object->type);
    printf("\n");

    freeObject(my_object);

    printf("Pointer to Object: %p\n", my_object);
}
这就是代码输出的内容:

Pointer to Object:  005E17B8
Pointer to Name  :  005E17D8
Name:  Test
Type:  1234

Pointer to Object:  005E17B8
Pointer to Name  :  00000000
Name:  (null)
Type:  0

Pointer to Object:  005E17B8
为什么我可以在函数中将指向结构名称的指针设置为NULL,而不是实际的结构指针本身?如何做到这一点?
我需要在函数中将我的_对象设置为NULL,这怎么可能呢?
谢谢。

用以下方法定义函数

void freeObject(struct object ** deadObject)
{
    free( *deadObject);
    *deadObject = NULL;
}
就这样说吧

freeObject( &my_object );

原始函数的问题在于参数是函数的局部变量。局部变量的任何更改都不会影响原始参数。

按以下方式定义函数

void freeObject(struct object ** deadObject)
{
    free( *deadObject);
    *deadObject = NULL;
}
就这样说吧

freeObject( &my_object );

原始函数的问题在于参数是函数的局部变量。局部变量的任何更改都不会影响原始参数。

按以下方式定义函数

void freeObject(struct object ** deadObject)
{
    free( *deadObject);
    *deadObject = NULL;
}
就这样说吧

freeObject( &my_object );

原始函数的问题在于参数是函数的局部变量。局部变量的任何更改都不会影响原始参数。

按以下方式定义函数

void freeObject(struct object ** deadObject)
{
    free( *deadObject);
    *deadObject = NULL;
}
就这样说吧

freeObject( &my_object );


原始函数的问题在于参数是函数的局部变量。局部变量的任何更改都不会影响原始参数。

我确信您的意思是将所有内容都包装在
if(deadObject!=NULL){…}
块中。:)@约翰说你错了。我不是说这是一个设计问题。例如,标准C字符串函数不检查指针是否等于NULL。将标准C str*函数作为正确软件设计的示例非常有趣。@John Hascall这取决于您的资格。对我来说,这不是一个设计问题。例如,它可能是一个低级函数。@VladfromMoscow谢谢您。这是有道理的。我忘了指针将是本地的。我确信您是想将所有指针都包装在
if(deadObject!=NULL){…}
块中。:)@约翰说你错了。我不是说这是一个设计问题。例如,标准C字符串函数不检查指针是否等于NULL。将标准C str*函数作为正确软件设计的示例非常有趣。@John Hascall这取决于您的资格。对我来说,这不是一个设计问题。例如,它可能是一个低级函数。@VladfromMoscow谢谢您。这是有道理的。我忘了指针将是本地的。我确信您是想将所有指针都包装在
if(deadObject!=NULL){…}
块中。:)@约翰说你错了。我不是说这是一个设计问题。例如,标准C字符串函数不检查指针是否等于NULL。将标准C str*函数作为正确软件设计的示例非常有趣。@John Hascall这取决于您的资格。对我来说,这不是一个设计问题。例如,它可能是一个低级函数。@VladfromMoscow谢谢您。这是有道理的。我忘了指针将是本地的。我确信您是想将所有指针都包装在
if(deadObject!=NULL){…}
块中。:)@约翰说你错了。我不是说这是一个设计问题。例如,标准C字符串函数不检查指针是否等于NULL。将标准C str*函数作为正确软件设计的示例非常有趣。@John Hascall这取决于您的资格。对我来说,这不是一个设计问题。例如,它可能是一个低级函数。@VladfromMoscow谢谢您。这是有道理的。我忘了指针是本地的。