首页 > 解决方案 > 在第二个函数内释放 C 中动态分配的数组

问题描述

我的问题是关于在不同功能中释放分配的内存。所以我的代码结构如下:

int main()
{
    // Declare variables
    double *val1, *val2;

    // Call function 1
    function1(&val);

    // Call function 2
    function2(&val2);

    // Do some stuff .....

    // Free dynamically allocated memory
    free(val1);
    free(val2);

    // End program
    return 0;
}

void function1(double *val1)
{
    /* Allocate memory */
    val1 = (double*) malloc(n1*sizeof(double));
    if (val1 == NULL){
        printf("Error: Memory not allocated!");
        exit(0);
    }
}

void function2(double *val2)
{
    // Allocate memory
    val2  = (double*) malloc(n2*sizeof(double));
    if (val2== NULL){
        printf("Error: Memory not allocated!");
        // Here I want to free val1!
        exit(0);
    }
}

这意味着为 function1 内部的 val1 和 function2 内部的 val2 分配了一些内存。

现在,函数 2 中不需要 val1 中包含的内容,所以我乍一看不必将指针传递给 val1。

但是,如果 val2 没有正确分配,我想退出程序,但首先释放所有分配的内存。我可以在 function2 中释放 val1 的内存而不传递 val1 的指针吗?

标签: cfunctiondynamic-memory-allocation

解决方案


使用动态分配构造函数的一种方法是返回整数的值,例如:int function1(double *val) 如果失败,您可以返回一个值,该值将在分配失败时指示它,并在main()


推荐阅读