Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 此代码是否会造成内存泄漏以及如何测试它_C_Pointers_Memory Leaks_Malloc_Free - Fatal编程技术网

C 此代码是否会造成内存泄漏以及如何测试它

C 此代码是否会造成内存泄漏以及如何测试它,c,pointers,memory-leaks,malloc,free,C,Pointers,Memory Leaks,Malloc,Free,嗨,我有一个源代码C,如下所示: #include <stdio.h> #include <stdlib.h> void test(int *a,int n) { a=(int*)malloc(n * sizeof(int)); for(int i=0;i<n;i++) a[i] = i+1; } int main() { int *ptr; int n; n = 5; printf("En

嗨,我有一个源代码C,如下所示:

#include <stdio.h>
#include <stdlib.h>
void test(int *a,int n)
{
    a=(int*)malloc(n * sizeof(int)); 
    for(int i=0;i<n;i++)
        a[i] = i+1;
}
int main()
{
    int *ptr;
    int n;
    n = 5;
    printf("Enter number of elements: %d\n", n);
    test(ptr,n);
    if (ptr == NULL) { 
        printf("Memory not allocated.\n");
    }
    else { 
     //...
    } 
    return 0; 
}
据我所知,当我们调用函数测试时,程序将创建一个指针ptr的阴影以放入内部测试,然后当我们退出测试时,ptr的阴影将被删除,因此在主要情况下ptr仍然为空,但在测试中,我们有用于ptr的malloca内存,该内存在堆中,当我们退出测试时,它不是空闲的。所以如果我多次调用test,这会导致内存泄漏,这是真的吗?我怎样才能用主存储器中的free函数来释放内存呢

void test(int *a,int n)
{
    a=(int*)malloc(n * sizeof(int)); 
    for(int i=0;i<n;i++)
        a[i] = i+1;
}
据我所知,当我们调用函数测试时,程序将创建一个指针ptr的阴影以放入内部测试,然后当我们退出测试时,ptr的阴影将被删除,因此ptr基本上仍然为空,但在测试中,我们有一个用于ptr的malloc内存,该内存在堆中,当我们退出测试时,它不是空闲的。所以如果我多次调用test,这会导致内存泄漏,这是真的吗

你的理解是正确的。只需调用一次函数就可以得到内存泄漏

我怎样才能用主存储器中的free函数来释放内存呢

void test(int *a,int n)
{
    a=(int*)malloc(n * sizeof(int)); 
    for(int i=0;i<n;i++)
        a[i] = i+1;
}
您必须返回指向调用者的指针才能启用该功能。见此:

据我所知,当我们调用函数测试时,程序将创建一个指针ptr的阴影以放入内部测试,然后当我们退出测试时,ptr的阴影将被删除,因此ptr基本上仍然为空,但在测试中,我们有一个用于ptr的malloc内存,该内存在堆中,当我们退出测试时,它不是空闲的。所以如果我多次调用test,这会导致内存泄漏,这是真的吗

你的理解是正确的。只需调用一次函数就可以得到内存泄漏

我怎样才能用主存储器中的free函数来释放内存呢

void test(int *a,int n)
{
    a=(int*)malloc(n * sizeof(int)); 
    for(int i=0;i<n;i++)
        a[i] = i+1;
}
您必须返回指向调用者的指针才能启用该功能。见此:

事实上,这个问题可能与我链接的问题重复。事实上,这个问题可能与我链接的问题重复。据我所知,您正在使用指针ptr的地址来通过函数测试,这意味着通过引用是真的吗?因此,如果我使用指向**p的指针指向*ptr,并通过值**p传递给函数测试,它将得到相同的结果。但我认为这两种方法会有一些不同的观点。你能解释一下这两种方法之间的区别吗?你的测试函数没有设置*a如果malloc成功了据我所知,你正在使用指针ptr的地址来通过函数测试,这意味着通过引用是真的吗?因此,如果我使用指向**p的指针指向*ptr,并通过值**p传递给函数测试,它将得到相同的结果。但我认为这两种方法会有一些不同的观点。你能解释一下这两种方法的区别吗?如果malloc成功,你的测试函数不会设置*a