gpt4 book ai didi

c - Malloc 指针参数失败

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:36 24 4
gpt4 key购买 nike

我有以下几行代码:

struct c_obj_thing *object = NULL;
c_obj_initalizer(object);
// at this point, (object == NULL) is 'true'
printf("Value: %d\n", object->value); // this segfaults

这里是 c_obj_initalizer 的定义:

int c_obj_initalizer(struct c_obj_thing *objParam) {
objParam = malloc(sizeof(struct c_obj_thing));
objParam->pointerThing = NULL;
objParam->value = 0;
return 0;
}

为什么当方法返回时,c_obj_initalizer 方法中的 malloc 没有保持附加到作为参数传递的指针?似乎对初始化器的调用没有做任何事情。我意识到不将实际的 c_obj_thing 作为指针传递将意味着在初始化器中所做的更改不会返回,但我认为动态内存在整个程序中永久存在。

最佳答案

因为当您调用函数时,它会发送指针的副本,当您在函数中更改它时,您不会在调用方法中更改。您需要在初始化程序之前对其进行 malloc。

例如:

struct c_obj_thing *object = malloc(sizeof(struct c_obj_thing));
c_obj_initalizer(object);
printf("Value: %d\n", object->value); // this segfaults


int c_obj_initalizer(struct c_obj_thing *objParam) {
objParam->pointerThing = NULL;
objParam->value = 0;
return 0;
}

关于c - Malloc 指针参数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com