我很想知道如果在函数中声明一个int指针,然后使用malloc 动态分配它会发生什么
void testing(){
int *p = malloc(sizeof(int));
*p = 5;
}
即使指针在函数执行完毕后被销毁,数据(本例中为5(是否仍存在于堆中?
使用malloc()
或calloc()
分配的内存不会自动释放。您必须显式调用free()
才能取消分配内存。
// Allocate
int* p = (int*)malloc(10 * sizeof(int));
// De-allocate
free(p);
即使指针被破坏了?
是的,它被称为内存泄漏。您分配了内存并将其引用存储在指针p
中,当p
被销毁时,您只丢失了对已分配内存的引用,从而导致内存泄漏。
在此函数中
void testing(){
int *p = malloc(sizeof(int));
*p = 5;
}
局部变量(指针(CCD_ 6具有自动存储持续时间。
对于这样一个不具有可变长度数组类型的对象,它的寿命从进入与其所在的块开始延长关联,直到该块的执行以任何方式结束。(C标准(。
使用malloc占用已分配内存的对象具有已分配的内存持续时间。
已分配对象的生存期从分配到解除分配。(C标准(。
因此,由于内存没有明确释放,因此对象的生存期将延长,直到程序结束。您无法访问对象或重用分配的内存,因为在退出函数后,存储在局部变量p
中的对象地址丢失。这种情况会引发内存泄漏。