c-动态分配的函数内部的局部指针变量会发生什么



我很想知道如果在函数中声明一个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中的对象地址丢失。这种情况会引发内存泄漏。

相关内容

  • 没有找到相关文章