在C语言中,我试图通过向独立函数发送指针来为结构分配内存。我知道分配内存需要malloc(),但是我对这个过程有点困惑。
如果我有一个函数:
void allocate(structure *ptr){
ptr = malloc(sizeof(ptr)); //ptr assigned memory block address
}
我正在分配一个与结构大小相等的内存块,但只分配给发送到函数的原始指针的副本。当函数返回对调用函数的控制时,ptr将丢失,我们现在有一个内存泄漏。
实际上,我要做的是向函数发送一个结构类型的指针,并为结构分配内存。
我知道这可以通过以下方式来实现:
structure *allocate(structure *ptr)
如果通话受到以下因素的影响:
some_struct_ptr = allocate(some_struct_ptr);
但怎么能用另一种方法呢?
最佳答案
你可以这样做:
void allocate( structure **ptr )
{
// Allocate memory for a single structure and put that address into the location
// that ptr points to. ptr is assumed to be the address of the pointer given
// by the caller
*ptr = malloc( sizeof(structure) );
}
所以当你想在一个参数中返回一个值时,你需要把这个变量的地址传入,然后把这个值赋给那个地址指向的对象。因为在本例中,变量是指针,所以您传递的是指针的地址,或者换句话说,是指向指针的指针。然后赋值
*ptr =...
表示“将地址赋给该地址指向的指针”。然后要调用它,需要传递要设置的指针的地址:
structure *my_ptr;
// Put something useful in my_ptr, like the address of memory that will hold a structure
allocate( &my_ptr );
在这种情况下,需要记住的重要一点是,您传递的是指针的位置,而不是指针指向的数据的位置。