引用堆中分配的变量

Referencing a variable allocated in heap

我最近学习了 C,但对我们如何引用堆中分配的内容感到有点困惑。

例如,假设我们做了如下操作:

void test(){

    int *a;
    a = (int*)(malloc(sizeof(int)*4));
    a[0] = 1;
    a[1] = 2;
    a[2] = 0;
    a[3] = 0;
}

现在,假设我在 main 中,显然,我不能在函数外做类似 a[0]=... 的事情,因为没有对 a 的引用,但它是在堆中分配的,所以我将如何参考它?我猜我必须 return 一个 int* 或将地址存储到函数外的 a

I am guessing I'd have to return an int* or store the address to a outside the function.

是的,这正是它的工作原理。

malloc 为您分配一个内存块,returns 一个指向该内存块第一个字节的指针。

您必须确保始终保留指向内存块的指针,直到您对其调用 free

这可以通过从函数返回指向它的指针来完成:

int* test(void){
    int *a;
    a = (int*)(malloc(sizeof(int)*4));
    //... (Also check here that malloc didn't return NULL.)
    return a;
}

或将其存储在其他地方,例如传递给函数的输出参数或全局变量。

如果您离开函数而没有在任何地方存储或返回指针的副本,那么您将失去指向内存块 (a) 的最后一个指针,并且将无法再次访问它。

后一种情况称为 内存泄漏

store the address to a

应该是a持有的地址,而不是a的地址a的值是分配内存的第一个字节的地址。 a的地址是指针变量本身的地址。