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