gpt4 book ai didi

c - 什么时候需要在指针上使用 malloc 分配动态内存?

转载 作者:行者123 更新时间:2023-12-04 12:33:05 33 4
gpt4 key购买 nike

我无法完全理解 C 中的 malloc() 函数,更准确地说,是在需要使用它的时候。

当我像这样声明一个指向全局结构的指针时,

struct Position* currentPositionPtr;

我是否需要使用 malloc 为其分配动态内存来初始化它?或者稍后在需要时简单地将结构的指针分配给它是一种好习惯,例如

currentPositionPtr = getPosition();

其中 getPosition() 返回指向“结构位置”的指针。

最佳答案

getPosition() 做什么?

如果它返回一个指向struct Position 的有效指针,那么您当然不需要为该结构两次分配内存。我希望您的函数看起来像这样:

struct Position *getPosition()
{
struct Position p = { x, y };
return &p;
}

因为这会表现出未定义的行为(通过返回指向 block 作用域自动对象的指针)。通常,您宁愿返回一个已经 malloc() 化的指针:

struct Position *getPosition()
{
struct Position *p = malloc(sizeof(*p));
p->x = 42;
p->y = 1337;
return p;
}

然后,同样,您不需要对 malloc() 进行额外调用。

但是,如果负责分配的不是被调用函数,那么,好吧......是调用者:

void getPosition(struct Position *p)
{
p->x = 42;
p->y = 1337;
}

在后一种情况下,您需要这样调用它:

struct Position *p = malloc(sizeof(*p));
getPosition(p);

如果您需要您的结构在函数返回后继续存在,或者

struct Position p;
getPosition(&p);

如果你不这样做。

关于c - 什么时候需要在指针上使用 malloc 分配动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219015/

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