我想定义一个尺寸为20 * 100000 C的2D数组。我不想保持大小固定。
答案 0 :(得分:1)
您需要定义一个指向指针的指针并将其初始化为:
int i;
double **array;
array = malloc(sizeof(double *)) * 20);
for (i=0; i<20; i++) {
array[i] = malloc(sizeof(double) * 100000);
}
完成后,不要忘记free
记忆。
答案 1 :(得分:1)
double **twod = malloc(20 * sizeof(double *));
int i;
if (twod == NULL)
abort();
for (i = 0; i < 20; ++i)
if ((twod[i] = malloc(100000 * sizeof(double))) == NULL)
abort();
// clean up
for (i = 0; i < 20; ++i)
free(twod[i]);
free(twod);
第一个malloc
调用为20个double
指针分配空间。每个double
指针都指向一个子数组。
循环中的第二个malloc
调用在每个子数组中分配100000个double
。
free
调用与malloc
相反 - 它们将内存返回到免费存储。首先,必须在循环中释放每个子数组。然后必须释放整个数组本身。
针对malloc
检查NULL
的返回值。如果malloc
返回NULL
,则系统内存不足。这很重要,因为您正在分配大量内存。如果malloc
返回NULL
,则应用程序将中止。
答案 2 :(得分:0)
您可以使用Variable-length array(自C99起)以避免碎片:
double (*array)[cols];
array = malloc(sizeof(*array) * rows);
这样调用free(array);
就足够了。