【发布时间】:2017-04-12 16:00:16
【问题描述】:
我用C的变长数组实现了一个算法:
int matrix[rows][cols];
我设法测试了这对于荒谬的尺寸确实会失败。有没有办法在堆而不是堆栈上分配这个矩阵?否则我将不得不将其重写为int**...
类似calloc(sizeof(int[rows][cols]), 1)?请注意,这个问题专门是关于可变长度数组的。
【问题讨论】:
-
@user3528438 我在特别地询问可变长度数组数据类型。此外,5D,真的吗?
-
适用于 5D 的内容可以简化为适用于 2D。你试过
calloc(sizeof(int[rows][cols]), 1)吗?你买了什么尺寸的?实际上,更相关的是打印rows、cols和sizeof表达式的值。它能给你你所需要的吗?问题是“我将结果分配给什么”? -
@TomášZato 5D?是的,认真的!为什么不呢?
-
@user3528438 我误读了另一篇文章,我认为尺寸是常量(它们是大写的)。
-
这个问题有多种重复。我刚刚看到一个在过去 6 小时内今天被问到的问题。我标记到那个特定的,因为 1)我使用 VLA 方法回答了它; 2) 5D 是一个独特的关键字,便于查找。然而,VLA 方法有两个版本:1)使用指向 N-D 数组的指针; 2) 使用指向 (N-1)-D 数组的指针并保持顶部维度为指针。前者的优点是将所有维度的大小记录为指针的类型,后者的优点是与常规 N-D 数组的语法相同,而不是 (N+1)-D
标签: c dynamic-memory-allocation calloc variable-length-array