在C中取消引用二维阵列指针

时间:2012-05-23 23:04:55

标签: objective-c c pointers reference

我指的是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?

3 个答案:

答案 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);