结构体中二维数组的动态内存分配

Dynamic memory allocation of 2d arrays that are in the struct

本文关键字:内存 分配 动态 二维数组 结构体      更新时间:2023-10-16

我有一个结构体,我正在寻找图像中行的开始和结束,以及在这些行中单词,字母等的开始和结束(实现基本的OCR)

typedef struct _IMAGE {
    int row; 
    int col; 
    int max_value;
    int **line;
    int **space;
    int **word;
    int **letter;
    int **matrix;//holds the image pixels
} IMAGE;

我想用动态分配矩阵改变我的代码。但是因为我不知道有多少行和字我不知道开始的大小所以不能做简单的动态分配。你建议我在这种情况下使用矢量吗?如果有,我应该如何使用它?

您在评论中澄清了2D数组中的列数将保持不变,而行数可以更改。

因此,您可以使用1D向量,并通过将(i, j)索引映射到单个索引来寻址元素,公式为:k = i * number_of_columns + j

然而,您说line数组将只有2列,一列用于该行的开始,一列用于该行的结束。这使我认为更方便(特别是对于语义)有一个Line结构/类有两个字段(开始,结束),并把这个结构/类的实例变成一个简单的1D向量。

当你设计一个数组,其中每个元素都有不同的意义取决于它的位置,元素很少,我认为最好设计一个合适的结构体。

最后,因为这是c++,你可以这样声明结构体:

struct X
{
    int a;
    // ...
}

没有专业的图像库将图像数据保存在矩阵中。您应该简单地执行:

struct Image
{
  int col;
  std::vector<int> matrix;
};

并访问像matrix[x+ col* y]这样的像素。这将是像素数据最快,最内存友好的布局。或者使用已经存在的图像结构来避免NIH的概念。