这是一个非常基本的问题,我对 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;
}
我想在另一个源文件或其他任何文件中调用它,我会声明一个指针和上面的指针并返回它吗?如果是这样,当我打电话时来自另一个类(class),例如
CGPoint *currentTilePosition = tileForCoordinates(curPosition, 50, 50);
malloc 返回的指针会怎样?它应该被释放还是什么故事? :)
最佳答案
回答“malloc() 返回的指针发生了什么?”
malloc()
声明的指针将是当前执行函数的栈帧中的一个值。当堆栈帧(以及 *tileCoordinate
)在函数返回时超出范围时,该指针将不复存在。
但是,因为您将指针值返回给调用函数,它现在存在于当前堆栈帧中(返回后)。此值由变量 *currentTilePosition
引用。
malloc()
分配的内存是完全不同的故事;堆上存在动态分配的内存。您应该释放在执行分配的同一实现中分配的任何内存。这意味着在您使用完 currentTilePosition
后立即调用 free()
,通常在同一个文件中。
关于c - 返回一个 malloc 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494176/