返回malloc指针

jar*_*ryd 7 c malloc struct

这里非常基本的问题,我对C中记忆的传递有点不确定.

如果我有以下内容

CGPoint* tileForCoordinates (CGPoint position, short width, short height)
{   
   CGPoint *tileCoordinate = (CGPoint*)malloc(sizeof(CGPoint));
   tileCoordinate->xTile = (position.xPosition / width);
   tileCoordinate->yTile = (position.yPosition / height);

   return tileCoordinate;
}
Run Code Online (Sandbox Code Playgroud)

我想在另一个源文件中调用它或者其他什么,我会在上面声明一个指针并返回它吗?如果是这样,当我打电话来自另一个班级时,例如

CGPoint *currentTilePosition = tileForCoordinates(curPosition, 50, 50);
Run Code Online (Sandbox Code Playgroud)

malloc返回的指针会发生什么?它应该被释放还是故事?:)

Rob*_*Rob 6

回答“ malloc()返回的指针发生了什么?”

声明的指针malloc()将是当前执行函数的堆栈帧中的值。当*tileCoordinate函数返回时堆栈帧(以及)超出范围时,该指针将不复存在。

但是,因为您将指针值返回给调用函数,所以它现在存在于当前堆栈帧中(返回之后)。该值由变量引用*currentTilePosition

分配的内存malloc()是一个完全不同的故事。动态分配的内存存在于堆中。您应该释放执行分配的同一实现中分配的所有内存。这意味着调用free()currentTilePosition,你正在使用它完成,通常在同一个文件尽快。


vpi*_*833 5

您可以将tileCoordinate作为参数传递给函数调用吗?这样,调用者会发现更容易记住 malloc/calloc 和 free。