在c中释放指向动态数组的指针

Hen*_*rik 4 c free pointers dynamic-arrays

我使用malloc在c中创建了一个动态数组.例如:

myCharArray = (char *) malloc(16);
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建一个这样的函数并将myCharArray传递给它:

reset(char * myCharArrayp)
{
    free(myCharArrayp);
}
Run Code Online (Sandbox Code Playgroud)

这会工作,还是我会以某种方式只释放指针(myCharArrayp)的副本而不是实际的myCharArray?

Joe*_*Joe 14

您需要了解指针只是一个存储在堆栈中的变量.它指向一个内存区域,在这种情况下,在堆上分配.您的代码正确释放了堆上的内存.从函数返回时,指针变量就像任何其他变量(例如an int)一样被释放.

void myFunction()
{
    char *myPointer;     // <- the function's stack frame is set up with space for...
    int myOtherVariable; // <- ... these two variables

    myPointer = malloc(123); // <- some memory is allocated on the heap and your pointer points to it

    free(myPointer); // <- the memory on the heap is deallocated

} // <- the two local variables myPointer and myOtherVariable are freed as the function returns.
Run Code Online (Sandbox Code Playgroud)


Jef*_*ter 8

这将很好,并释放你所期望的记忆.

我考虑写一个像这样的函数

 void reset(char** myPointer) {
     if (myPointer) {
         free(*myPointer);
         *myPointer = NULL;
     }
 }
Run Code Online (Sandbox Code Playgroud)

这样在释放后指针被设置为NULL.重用以前释放的指针是常见的错误来源.

  • 是的,你需要一个`char**`(或`void**`),但为什么不在代码中调用`free`后给指针指定`NULL`?引用:"如果ptr是NULL指针,则不执行任何操作." 所以我会说这个功能有点浪费! (2认同)