我无法完全理解C中的malloc()函数,更准确地说是在需要使用它时.
当我声明一个指向全局结构的指针时,
struct Position* currentPositionPtr;
Run Code Online (Sandbox Code Playgroud)
我需要使用malloc初始化动态内存吗?或者,稍后在需要时简单地将结构的指针指定给它是好的做法,例如
currentPositionPtr = getPosition();
Run Code Online (Sandbox Code Playgroud)
where getPosition()返回指向"struct Position"的指针.
小智 8
怎么getPosition()办?
如果它返回一个有效的指针struct Position,那么当然你不需要为结构分配两次内存.我希望你的函数并不会是这样的:
struct Position *getPosition()
{
struct Position p = { x, y };
return &p;
}
Run Code Online (Sandbox Code Playgroud)
因为这会表现出未定义的行为(通过返回指向块作用域自动对象的指针).通常,您宁愿返回已经使用过的 malloc()指针:
struct Position *getPosition()
{
struct Position *p = malloc(sizeof(*p));
p->x = 42;
p->y = 1337;
return p;
}
Run Code Online (Sandbox Code Playgroud)
然后,再次,您不需要额外的呼叫malloc().
但是,如果负责分配的不是被叫函数那么,那么......调用者是:
void getPosition(struct Position *p)
{
p->x = 42;
p->y = 1337;
}
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,您需要像这样调用它:
struct Position *p = malloc(sizeof(*p));
getPosition(p);
Run Code Online (Sandbox Code Playgroud)
如果你需要你的结构来存活函数返回,或者
struct Position p;
getPosition(&p);
Run Code Online (Sandbox Code Playgroud)
如果你不这样做.