This question already has answers here:
C Pointer and Memory Allocation: Realloc Arrays and Pointer Passing
                                
                                    (5个答案)
                                
                        
                                3年前关闭。
            
                    
我想更好地掌握动态指针。

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));

   }
   */

}


问题:


当我将*pt传递给函数时,它会自动更新main中的*pt还是我需要从函数中返回*pt来做到这一点?
如果我在函数中释放了*tempPt,它也会释放*pt吗?
如果我在函数内部分配了一个*tempPt,在函数结束后是否会自动释放它指向的数据?
可以从前面的问题中间接回答这个问题,但是我将如何创建一个*tempPt并在不取消分配*pt的情况下在循环中取消分配它,以便可以重复该过程?


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

最佳答案

如果更改pt指向的内存地址(如包含的函数中一样),它将不会更新主函数中指针所指向的内存地址。但是,如果您在主功能中更改该内存地址pt处的数据,则也将指向该更改的数据。
是的,因为它们都指向相同的基础数据。
不,C没有自动垃圾回收,因此必须显式释放堆上声明的任何内存。
我不太确定你在问什么。如果释放tempPt,则pt将成为显示代码中的悬空指针,因为它们都指向相同的基础数据。因此,如果为temptPt == pt,则在不释放tempPt指向的数据的同时也释放pt指向的数据的情况是不可能的。

关于c - 动态指针操作C-编程[复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36438928/

10-09 13:35