C 动态分配的函数中的局部指针变量会发生什么变化?
我很想知道如果在函数中声明一个int指针,然后使用malloc动态分配它会发生什么C 动态分配的函数中的局部指针变量会发生什么变化?,c,pointers,malloc,global-variables,C,Pointers,Malloc,Global Variables,我很想知道如果在函数中声明一个int指针,然后使用malloc动态分配它会发生什么 void testing(){ int *p = malloc(sizeof(int)); *p = 5; } 即使在函数完成执行后指针被销毁,数据(本例中为5)是否仍存在于堆中 即使 指针被破坏了 是的,这叫做内存泄漏。您分配了内存并将其引用存储在指针p中,当p被销毁时,您只丢失了对已分配内存的引用,从而导致内存泄漏。使用malloc()或calloc()分配的内存不会自动释放。您必须显式调用fr
void testing(){
int *p = malloc(sizeof(int));
*p = 5;
}
即使在函数完成执行后指针被销毁,数据(本例中为5)是否仍存在于堆中
即使
指针被破坏了
是的,这叫做内存泄漏。您分配了内存并将其引用存储在指针
p
中,当p
被销毁时,您只丢失了对已分配内存的引用,从而导致内存泄漏。使用malloc()
或calloc()
分配的内存不会自动释放。您必须显式调用free()
,以取消分配内存
// Allocate
int* p = (int*)malloc(10 * sizeof(int));
// De-allocate
free(p);
在这个函数中
void testing(){
int *p = malloc(sizeof(int));
*p = 5;
}
局部变量(指针)p
具有自动存储持续时间
对于没有可变长度数组类型的对象,
它的生存期从进入它所在的块开始
直到该块的执行以任何方式结束为止
标准)
使用malloc占用分配内存的对象具有分配的内存持续时间
已分配对象的生存期从分配到
解除分配。(C标准)
因此,由于内存没有显式释放,因此对象的生存期将一直延长,直到程序完成。您无法访问对象或重用分配的内存,因为在退出函数后,存储在局部变量
p
中的对象地址丢失。这种情况会导致内存泄漏。“存储[…]其引用”更好的说法是“存储其地址”。虽然“引用”在C中不存在,但它们在C++中是不同的,并且C和C++是表兄弟,这可能会引起混淆。非常感谢。