如何为二维数组动态分配连续的内存块

2024-06-28

如果我像这样分配一个二维数组整数a[N][N];它将分配一个连续的内存块。

但如果我尝试像这样动态地执行此操作:

int **a = malloc(rows * sizeof(int*));
for(int i = 0; i < rows; i++) 
   a[i] = malloc(cols * sizeof(int));

这会在行中的元素之间保持单位步长,但行之间可能不是这种情况。

一种解决方案是从 2D 转换为 1D,除此之外,还有其他方法吗?


如果您的数组维度在编译时已知:

#define ROWS ...
#define COLS ...

int (*arr)[COLS] = malloc(sizeof *arr * ROWS);
if (arr) 
{
  // do stuff with arr[i][j]
  free(arr);
}

如果您的数组维度在编译时未知,并且您使用的是支持可变长度数组的 C99 编译器或 C2011 编译器:

size_t rows, cols;
// assign rows and cols
int (*arr)[cols] = malloc(sizeof *arr * rows);
if (arr)
{
  // do stuff with arr[i][j]
  free(arr);
}

如果您的数组维度在编译时未知,并且您是not使用支持变长数组的C99编译器或C2011编译器:

size_t rows, cols;
// assign rows and cols
int *arr = malloc(sizeof *arr * rows * cols);
{
  // do stuff with arr[i * rows + j]
  free(arr);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为二维数组动态分配连续的内存块 的相关文章

随机推荐

  • 文件的计算

    Day price1 price2 2 2 2000 10 15 3 2 2000 12 18 4 2 2000 14 19 对于每个值 价格 1 和价格 2 我想为每一列计算不同的 现在 过去 line2 line1 为了做到这一点 使用
  • numpy polyfit 通过 0

    假设我有x and y带有权重向量的向量wgt 我可以拟合三次曲线 y a x 3 b x 2 c x d 通过使用np polyfit如下 y fit np polyfit x y deg 3 w wgt 现在 假设我想做另一次拟合 但这
  • Mercurial:使用 hg pull --rebase 的问题的具体示例

    我正在努力寻找适合我们工作方式的多变工作流程 我目前倾向于对每个功能进行克隆 但这与 Subversion 的思维方式相比发生了很大的变化 我们还会遇到当前设置环境的费用问题 使用 hg pull rebase 似乎给我们提供了更多类似 S
  • pygtk关于设置按钮敏感属性的奇怪问题

    在我的一种方法中 我有以下代码 def fun self button1 set sensitive False self get time 然而 self button1只有在get time 返回后才变得不敏感 使用time sleep
  • jQuery Multiselect - 全选并带有过滤搜索

    当您使用search feature 然后使用select all它不能一起工作 它选择 所有内容 就好像搜索没有进行任何更改 但搜索本身 隐藏 元素 它应该只选择所有的项目visible 想知道其他人是否遇到过这个问题或知道解决方案 如果
  • 如何命名 HDF5 数据集中的列?

    我在h5py中制作了一个数据集 f h5py File experimentReadings hdf5 w dset f create dataset physics 5 4 dtype f 我有一个变量名称列表 namesList hei
  • Azure 表存储快照/备份功能

    我似乎找不到任何有关拍摄 Azure 表存储快照的文档 也找不到任何有关进行备份的文档 我发现几年前的一些帖子 人们说他们通过在 Windows 调度程序调用的 VM 上运行的 AzCopy 将表存储导出到另一个存储帐户 但这似乎非常过时
  • x = os.system(..) 的返回值[重复]

    这个问题在这里已经有答案了 当我打字时os system whoami 在Python中 作为root 它返回root 但是当我尝试将它分配给变量时x os system whoami 它将 x 的值设置为 0 为什么 os system
  • 有没有办法刷新 Oracle 中 PL/SQL 的输出?

    我有一个从 shell 脚本中调用的 SQL 脚本 需要很长时间才能运行 目前它包含dbms output put line不同点的声明 这些打印语句的输出会出现在日志文件中 但仅在脚本完成后才会出现 有什么方法可以确保脚本运行时输出出现在
  • 缩小位图字体的算法

    这是后续这个问题 https stackoverflow com questions 4179414 low level c display text pixel by pixel 我正在开发一个低级 C 应用程序 我必须在其中绘制文本 我
  • 如果我从 Sun JDK 切换到 OpenJDK,我需要准备哪些惊喜?

    如果我从 Sun JDK 切换到 OpenJDK 我需要为哪些意外做好准备 哪些地方经常出错 这有多困难 当然 每个应用程序都可能有其各自的问题 但我正在寻找classes很多人在切换 JDK 时已经遇到过很多问题 OpenJDK 不太可能
  • HDFS NFS 位置使用奇怪的数字用户名值作为目录权限

    在 NFS 安装的 HDFS 位置的文件夹权限中看到用户名的无意义值 而 HDFS 位置本身 使用 Hortonworks HDP 3 1 看起来很好 例如 ls lh nfs mount root user total 6 5K drwx
  • 特定于文化的日期时间字符串在平台之间不一致

    我有一个测试应用程序 允许用户从组合框中选择区域性 并在多行文本框中显示区域性特定日期 代码如下 public partial class Form1 Form public Form1 InitializeComponent comboB
  • AS3中如何知道一个对象是否是动态的

    在Action Script 3中 您可以编写一个定义动态对象的类 MovieClip和Object是两个例子 这个对象可以在运行时修改 我想知道是否有某种方法 当然是在运行时 知道某个对象是否是动态的 PS 没有做这样的事情 functi
  • 更改分配新变量的默认环境

    我经常想在全局环境下的一个环境中创建很多变量 这可以通过以下方式轻松完成envir论证sys source 如果由正在获取的文件创建的所有变量都应该进入单个环境 但我通常使用创建变量集的文件 一组应该进入一个环境 另一组应该进入另一个环境
  • pymc3 中均匀分布的区间变换是什么?

    我注意到 当在 pymc3 中使用均匀分布时 采样器也会扫描 interval参数也是如此 除非指定了转换 例如 with fitModel6 normMu pm Uniform normMu lower 0 upper 1000 不仅会导
  • pandas 数据框到键值对

    将以下 pandas 数据帧转换为键值对的最佳方法是什么 Before datetime name qty price 2017 11 01 10 20 apple 5 1 2017 11 01 11 20 pear 2 1 5 2017
  • 使用 python 3.6 和 anaconda 3.6 在 Windows 10 上安装 opencv

    如何使用python 3 6和anaconda 3 6安装opencv I tried conda install c https conda binstar org menpo opencv3 但我收到以下错误 Unsatisfiable
  • 如何在 Flex 中使用 FTP?

    我是 Flex 环境的新手 特别是 flex3 我已经研究了1个星期了 我有一个项目 我需要FTP来上传和下载mp3和图片文件 最好的开始方式是什么 如果您的意思是在 Flex 中创建 FTP 客户端 那么它已经完成了 FlexFTP ht
  • 如何为二维数组动态分配连续的内存块

    如果我像这样分配一个二维数组整数a N N 它将分配一个连续的内存块 但如果我尝试像这样动态地执行此操作 int a malloc rows sizeof int for int i 0 i lt rows i a i malloc col