在 2D 动态数组中填充数据

Filling data in 2D dynamic array

本文关键字:填充 数据 数组 2D 动态      更新时间:2023-10-16

我想将字符串类型的数据变量存储在内存中,这些变量实际上是图像的十六进制代码。因此,将有一个2D动态数组,它在运行时存储数据。我尝试按照代码填充数据,首先创建指针到指针的动态数组,如下所示。

//dynamic allocation of array
int row = rows - 1;
int col = cols - 1;
Mat img = image;
cout << " row " << row << " col " << col <<endl;
    String **matrix;
    matrix= new String*[row]; // dynamic array (size 10) of pointers to int
    for (int i = 0; i < 10; ++i) {
        matrix[i] = new String[col];
        // each i-th pointer is now pointing to dynamic array (size 10) of actual int values
    }

在这里,如果我没记错的话,我得到了堆上的内存。所以我编写嵌套循环来提取 RGB 信息,转换为十六进制字符串并存储在数组中。

for (int r = 0; r <= row; r++) {
        cout << endl;
        for (int c = 0; c <= col; c++)
        {
            Vec3b intensity = img.at<Vec3b>(r, c);
            uchar blue = intensity.val[0];
            int b = (int)blue;
            uchar green = intensity.val[1];
            int g = (int)green;
            uchar red = intensity.val[2];
            int r = (int)red;
            //filling dynamic array
            matrix[row][col] = RGBToHex(r,g,b);
        }
    }

这是我将RGB转换为十六进制字符串的方法。

string RGBToHex(int rNum, int gNum, int bNum)
{
    // returns 6 digit hex code
    string result;
    char r[255];
    sprintf_s(r, "%.2X", rNum);
    result.append(r);
    char g[255];
    sprintf_s(g, "%.2X", gNum);
    result.append(g);
    char b[255];
    sprintf_s(b, "%.2X", bNum);
    result.append(b);
    return result;
}

我尝试提取 RGB 信息,转换为十六进制字符串,存储在.txt文件中,它可以工作,但是当我尝试填充数组时会抛出以下异常。

请强调问题所在,让我知道我错在哪里。

 **Exception thrown at 0x000007FEE1AD7330 (opencv_world310.dll) in ImageDecoder.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
    If there is a handler for this exception, the program may be safely continued.**
for (int r = 0; r <= row; r++) {

我认为它应该是r < row而不是r <=row

如果您分配了 10x10 的 2D 数组,那么这个matrix[row][col]应该是matrix[9][9]的,并且您的循环使其matrix[10][10 ],这是一个问题。

下面的语句也有问题,使用行而不是 10。

 for (int i = 0; i < 10; ++i) {

matrix[row][col] = RGBToHex(r,g,b);

你定义matrix的方式,最多可以访问matrix[row-1][col-1],不是吗?

并不是说rowcol似乎是固定值。