使用double类型定义一个非常大的2D数组数组

时间:2016-09-09 23:56:32

标签: c arrays

我想定义一个尺寸为20 * 100000 C的2D数组。我不想保持大小固定。

3 个答案:

答案 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);就足够了。