This question already has answers here:
C Pointer and Memory Allocation: Realloc Arrays and Pointer Passing
(5个答案)
3年前关闭。
我想更好地掌握动态指针。
问题:
当我将
如果我在函数中释放了
如果我在函数内部分配了一个
可以从前面的问题中间接回答这个问题,但是我将如何创建一个
编辑问题4:也许我想做的一个更具体的例子将阐明这个问题。我正在运行基本的启发式算法。将指针传递给函数后,我将操作数据,然后运行算法并使用* tempPt指向该算法。如果* tempPt的数据比* pt的数据更优化,我想用* tempPt的数据更新* pt。
(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