c - 返回一个 malloc 指针

标签 c struct malloc

这是一个非常基本的问题,我对 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/

相关文章:

c++ - 使用 GCC 在可执行文件中嵌入资源

Webdav 的 Curl c 示例在 Apache 服务器上使用摘要身份验证

c - x86-64 结构中的数据对齐

c - 遇到一个非常烦人的段错误...在 C 中分配二维数组

c - 如何逐个字符读取文件,然后将它们存储到动态分配的数组中

c - "bytes numbered from 0 (LSB) to 3 (MSB)"是什么意思?

c - 返回结构时出现段错误

http - 如何将所有GET请求查询参数放入Go中的结构中?

c - 另一个动态内存分配错误

c++ - 从 C++ 中的函数返回 2D 字符数组并打印它