【问题标题】:Dynamic pointer manipulation C-Programming [duplicate]动态指针操作 C 编程 [重复]
【发布时间】:2016-04-05 23:37:48
【问题描述】:

我想更好地掌握动态指针。

int main(){ 

  // allocate pointer
  randomStructure *pt = (randomStructure *)malloc(sizeof(randomStructure));

  // arbitrary code that manipulates data that *pt points to. 

  // function call
  function(pt);

  return 0;
}


void function(randomStructure *pt){

   randomStructure *tempPt = (randomStructure *)malloc(sizeof(randomStructure));

   // arbitrary code that manipulates data that *tempPt points to. 

   pt = tempPt;

   //free(tempPt); Question2

   /* Question 4
   while(index){
     randomStructure *tempPt = (randomStructure *)malloc(sizeof(randomStructure));

   }
   */

}

问题:

  1. 当我将 *pt 传递给函数时,它会自动更新 main 中的 *pt 还是我需要从函数中返回 *pt 才能做到这一点?

  2. 如果我释放函数中的*tempPt,它是否也会释放*pt

  3. 如果我在函数内部 malloc 一个*tempPt,它指向的数据会在函数结束后自动释放吗?

  4. 这个问题可以从前面的问题中间接回答,但是我如何创建一个*tempPt 并在循环中释放它而不释放*pt 以便可以重复该过程?

编辑问题 4:也许我正在尝试做的一个更具体的例子可以澄清这个问题。我正在运行一个基本的启发式算法。在将指针传递给函数后,我操作数据,然后运行算法并使用 *tempPt 指向它。如果 *tempPt 的数据比 *pt 的数据更优化,我想用 *tempPt 的数据更新 *pt。

【问题讨论】:

  • 什么是“动态指针”?
  • 欢迎来到 Stack Overflow。请不要使用告别辞或签名。 SO 不是讨论列表,它更像是编程问题的在线参考书。简洁和清晰是非常重要的,相反,绒毛是不想要的。请阅读“How to Ask”了解更多信息。
  • 我的错。这是我的第一篇文章。非常感谢所有建议!我不完全确定如何调用指向动态分配内存的指针,因此我将其称为“动态指针”。也许我的示例代码会更清楚地说明它?
  • 存在许多关于 SO 的现有问题,围绕 C 函数调用的按值参数传递语义,以及它如何与指针交互。

标签: c function pointers dynamic free


【解决方案1】:
  1. 如果你改变了pt指向的内存地址(就像你在包含的函数中一样),它不会更新main函数中指针指向的内存地址。但是,如果您在主函数中更改该内存地址pt 处的数据,也会指向该更改的数据。
  2. 是的,因为它们都指向相同的基础数据。
  3. 不,C 没有自动垃圾回收,因此堆上声明的任何内存都必须显式释放。
  4. 我有点不确定你在问什么。如果您释放tempPtpt 将成为您显示的代码中的一个悬空指针,因为它们都指向相同的基础数据。因此,如果temptPt == pt,则不可能释放tempPt 指向的数据而不释放pt 指向的数据,因为它们指向同一事物。

【讨论】:

  • 欣赏!我更新了问题 4,以便更清楚地了解我正在尝试做的事情。
  • 如果tempPtpt指向的不是同一个数据,可以释放pt指向的数据,然后从函数中返回tempPtr。因此,您的函数调用将是 pt = function(pt);
  • 太好了,我只是在想同样的事情!对此,我真的非常感激。干杯
猜你喜欢
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多