将1d缓冲区重新组织为2d数组

sph714

我给了一个int buffer[100]足够大的1d缓冲区()。我需要重新组织与2d数组相同的内存。我想做的是将其类型转换为double pointer(int ** p),然后将指针传递给alloc函数,该函数将进行重组。函数返回后,我需要该语句p[2][2]才能工作。

这是代码:

#include <stdlib.h>
#include <stdio.h>

void alloc(int ** buf, int r, int c)
{
    int **temp;
    temp=buf;
    for(int i=0;i<r;i++)
        buf[i]=*(temp+i*c);
}
void main()
{
    int buffer[100];
    int **p=(int **)buffer;
    alloc(p, 4, 4);
    p[2][2]=10;
    printf("%d", p[2][2]);
}

上面的代码编译成功,但是当我运行代码时,执行该语句时出现访问冲突

p[2][2]=10;

我无法理解问题所在。分配函数有问题吗?还是其他问题?

萨胡

让我们检查您的代码以了解为什么它不起作用。

让我们使用一个较短的缓冲区来了解您在做什么。

假设您有:

int buffer[9];

并且您想将其视为3x3 2D阵列。内存使用的缓冲区:

buffer
|
v
+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+

您想要创建一个int** p这样的:

p[0]        p[1]        [p2]
|           |           |
v           v           v
+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+

为了实现这个目标,你必须分配内存来存储p[0]p[1]p[2]这意味着,您需要:

int** p = new int*[3];
p[0] = buffer;
p[1] = buffer + 3;
p[2] = buffer + 6;

现在,p还有p[0]p[1]p[2]指向有效的地址。您可以使用语法p[m][n]

在我们的代码中,您刚刚被分配p为指向buffer和通过使用以下语句指向相同的位置

buf[i]=*(temp+i*c);

您只是使用buffer作为的持有者持有的内存int*,这不仅会践踏其中的数据,buffer而且还会使指针的值不可预测。

这是一个工作程序。

#include <stdio.h>

int main()
{
   int buffer[100];
   int rows = 4;
   int cols = 10;
   int **p = new int*[rows];
   for ( int i = 0; i < rows; ++i )
   {
      p[i] = buffer + i*cols;
      printf("%p\n", p[i]);
      for ( int j = 0; j < cols; ++j )
      {
         p[i][j] = i*2 + j*3;
      }
   }
   printf("\n");

   for ( int i = 0; i < rows; ++i )
   {
      for ( int j = 0; j < cols; ++j )
      {
         printf("%d ", p[i][j]);
      }
      printf("\n");
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将1d缓冲区重新组织为2d数组

来自分类Dev

JS数组—将1D数组重新组织为N组的2D数组,依次放置值

来自分类Dev

Java:将2D数组转换为带有组织和随机数的1D数组

来自分类Dev

Python:将2D数组扩展为多个1D数组

来自分类Dev

将1d数组的一部分渲染为2D?

来自分类Dev

将 2d 数组索引为 1d

来自分类Dev

如何在 OpenGL 中重新定位绑定到帧缓冲区的 2D 纹理?

来自分类Dev

快速的Python绘图库可直接在2D numpy数组图像缓冲区上绘制绘图?

来自分类Dev

为什么将数组显示为1D而不是2D,但该表仍然有效?

来自分类Dev

随机放置1D字符串数组为2D char数组

来自分类Dev

Sklearn转换错误:预期为2D数组,取而代之的是1D数组

来自分类Dev

numpy:将2D数组乘以1D数组

来自分类Dev

脾气暴躁:将1D数组作为2D数组而不进行整形

来自分类Dev

JAVA将2d数组的列作为1d数组传递

来自分类Dev

使用指针时将2D数组用作多个1D数组

来自分类Dev

如何将2D数组转换为1D数组以在视图中显示

来自分类Dev

numpy将2D数组与1D数组连接

来自分类Dev

将2D数组作为参数传递给采用1D数组的函数

来自分类Dev

将2D数组转换为相同大小但形状像1D的数组?

来自分类Dev

将列表的1D数组转换为2D数组

来自分类Dev

将2D数组转换为1D数组以创建数据框

来自分类Dev

将2D数组的元素与两个1D数组的乘积进行比较?

来自分类Dev

将2d数组添加到1d数组

来自分类Dev

将点的2D数组转换为1D数组

来自分类Dev

使用指针时将2D数组用作多个1D数组

来自分类Dev

将2D数组转换为1D数组错误

来自分类Dev

numpy:将索引的2D数组转换为1D数组以进行交集计算

来自分类Dev

C ++ 2D数组到1D数组

来自分类Dev

在1d数组中填充2d数组

Related 相关文章

热门标签

归档