取消引用 C 中的二维数组指针



我指向一个二维数组的地址,我对如何取消引用指针以再次释放内存感到困惑。 (我不使用"->"或"*"。 这有错吗?

我的代码:

double array[12][12];
//filled with numbers
double *arrayPtr; //pointer
arrayPtr = &array[0][0]; //pointing to address
multiply(arrayPtr, arrayPtr); //this works fine
//Do I need to do anything further to make sure my memory management is correct?  And if so, why?

在这种情况下,答案是否定的——因为你只是简单地定义了array(没有使用malloc之类的东西来分配它),你也不必做任何事情来释放它。如果它是本地的(在函数内部定义),则当您退出函数时,它将自动释放。如果你在任何函数之外定义了它,它是一个全局函数,所以它会在程序运行的整个过程中存在。无论哪种方式,您都不必进行任何显式内存管理。

double array[12][12];

您正在堆栈上声明array。它不是与堆一起动态分配的,因此您不会"释放内存"。

double *arrayPtr; //pointer
arrayPtr = &array[0][0]; //pointing to address

如果要指向第一个元素,这就足够了:

double* arrayPtr = array;

首先,C 和 C++ 之间有很大的不同

在 C 语言中,要使用内存管理,您应该使用 malloc/calloc/realloc 和 free。在 c++ 中,您将使用 new 和 delete。

在您的代码中。

double array[12][12];

这意味着在堆栈中分配内存。因此,内存将被分配给此程序部分的范围,以便当此变量的作用域结束时它将为绿色。

如果您愿意免费使用,您将需要

 double **array;
 array = (double **) malloc(sizeof(double*));
 *array = (double*) malloc (24 * sizeof(double));
free (*array);
free (array);