و همیشه بعد از گرفتن حافظه از سیستم و استفاده از آن باید آنرا آزاد کرد.
int main()
{
double **table;
int nx = 3, ny = 2; /* will actually be obtained at run time */
int i, j;
printf("In main(): before createArray, table = %p\n\n", (void *) table);
table = createArray(nx, ny);
printf("In main(): after createArray, table = %p\n\n", (void *) table);
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
printf("table[%d][%d] is %f\n", i, j, table[i][j]); /* %f */
}
}
free(table); // اضافه شود
return 0;
}
در ضمن تابع دریافت حافظه از سیستم را بصورت زیر ساده تر کنید.
double **createArray(int nx, int ny)
{
int i, j;
double **retval;
retval = (double **)malloc(nx * ny * sizeof(double)); // تغییر
printf("Inside createArray: retval = %p\n", (void *)retval);
printf("inside the creating function:\n");
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
retval[i][j] = ny * i + j;
printf("retval[%d][%d] is %f\n", i, j, retval[i][j]); /* %f */
}
}
printf("\n");
return retval;
}