【发布时间】:2015-10-18 15:41:57
【问题描述】:
我已经阅读了很多关于分配内存的帖子,并且我认为我理解了这个概念,但有人告诉我必须使用看起来像这样的方法:
double ** malloc_array2d(size_t m, size_t n)
{
double **A;
size_t i;
A = malloc(m * sizeof(double *));
if (A == NULL)
return NULL;
A[0] = (double *) malloc(m * n * sizeof(double));
if (A[0] == NULL)
{
free(A);
return NULL;
}
for (i = 1 ; i < m ; i++)
A[i] = A[0] + i *n;
return A;
}
当然,稍后我将不得不释放内存-但我只是不太了解这种方法,更具体地说,我无法真正看到在将剩余指针设置为的最后一行中发生了什么内存块(有人告诉过我。而且我不确定在完成分配后如何在矩阵/数组中插入元素。
【问题讨论】:
-
你可以随时谷歌..
-
你也可以保持一致,你第二次投
malloc()只是根本不这样做,或者即使它丑陋和不必要但也要保持一致。 -
for循环非常小,尝试取小的具体值(比如m=n=2),然后写出函数的作用,扩展循环迭代。为分配的块和指针画框和箭头...如果您仍然看不到发生了什么,请说明您确实了解哪些位。 -
这不是一个二维数组,而是一个奇怪的模拟。这属于博物馆,现代C自C99以来可以做得更好。只需使用
double (*arr)[m] = malloc(sizeof(double[n][m]));一次性分配一个二维数组。您甚至不需要为此提供特殊功能。