gpt4 book ai didi

c++ - 在二维动态数组中填充数据

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:31 25 4
gpt4 key购买 nike

我想在内存中存储String类型的数据变量,这些变量实际上是图像的十六进制代码。所以会有一个二维动态数组,它存储运行时的数据。我尝试使用以下代码来填充数据,首先创建指向指针动态数组的指针,如下所示。

//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 的二维数组,那么这个 matrix[row][col]应该是 matrix[9][9]你的循环使它成为matrix[10][10 ] 这是个问题。

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

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

关于c++ - 在二维动态数组中填充数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com