我指的是2D数组的地址,我很困惑如何取消引用指针以再次释放内存。 (我不使用“ - >”或“*”。这是错的吗?)
我的代码:
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?
答案 0 :(得分:4)
在这种情况下,答案是否定的 - 因为您只是定义了array
(没有使用类似malloc
的东西来分配它),您不必做任何事情来解放它。如果它是本地的(在函数内定义),它将在退出函数时自动释放。如果你在任何函数之外定义它,它是一个全局函数,所以它会在程序运行的整个时间内存在。无论哪种方式,您都不必进行任何明确的内存管理。
答案 1 :(得分:2)
double array[12][12];
你在堆栈上声明array
。它不是用堆动态分配的,所以你不要“释放内存”。
double *arrayPtr; //pointer
arrayPtr = &array[0][0]; //pointing to address
如果你想指向第一个元素,这就足够了:
double* arrayPtr = array;
答案 2 :(得分:0)
首先,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);