这里非常基本的问题,我对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返回的指针会发生什么?它应该被释放还是故事?:)
声明的指针malloc()将是当前执行函数的堆栈帧中的值。当*tileCoordinate函数返回时堆栈帧(以及)超出范围时,该指针将不复存在。
但是,因为您将指针值返回给调用函数,所以它现在存在于当前堆栈帧中(返回之后)。该值由变量引用*currentTilePosition。
分配的内存malloc()是一个完全不同的故事。动态分配的内存存在于堆中。您应该释放执行分配的同一实现中分配的所有内存。这意味着调用free()上currentTilePosition,你正在使用它完成,通常在同一个文件尽快。