指向二维数组作为函数参数的指针 这个C++代码至今为我工作:

指向二维数组作为函数参数的指针 这个C++代码至今为我工作:,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,Main.cpp: unsigned __int16** image_data; image_data = Grabber->get_image_data(1); unsigned __int16** Grabber::get_image_data(int image_num) { unsigned __int16 **pixel_values = 0; pixel_values = new unsigned __int16*[height]; for (int

Main.cpp:

unsigned __int16** image_data; 
image_data = Grabber->get_image_data(1);
unsigned __int16** Grabber::get_image_data(int image_num) {
    unsigned __int16 **pixel_values = 0;
    pixel_values = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        pixel_values[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            pixel_values[h][w] = ...;
        }
    }
    return pixel_values;
}
unsigned __int16** image_data;
Grabber->get_image_data(1, &image_data);
int Grabber::get_image_data(int image_num, unsigned __int16*** image_data) {
    *image_data = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        *image_data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            *image_data[h][w] = ...;
        }
    }
    return 0;
}
interface.cpp:

unsigned __int16** image_data; 
image_data = Grabber->get_image_data(1);
unsigned __int16** Grabber::get_image_data(int image_num) {
    unsigned __int16 **pixel_values = 0;
    pixel_values = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        pixel_values[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            pixel_values[h][w] = ...;
        }
    }
    return pixel_values;
}
unsigned __int16** image_data;
Grabber->get_image_data(1, &image_data);
int Grabber::get_image_data(int image_num, unsigned __int16*** image_data) {
    *image_data = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        *image_data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            *image_data[h][w] = ...;
        }
    }
    return 0;
}
Interface.cpp:

unsigned __int16** image_data; 
image_data = Grabber->get_image_data(1);
unsigned __int16** Grabber::get_image_data(int image_num) {
    unsigned __int16 **pixel_values = 0;
    pixel_values = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        pixel_values[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            pixel_values[h][w] = ...;
        }
    }
    return pixel_values;
}
unsigned __int16** image_data;
Grabber->get_image_data(1, &image_data);
int Grabber::get_image_data(int image_num, unsigned __int16*** image_data) {
    *image_data = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        *image_data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            *image_data[h][w] = ...;
        }
    }
    return 0;
}
int-Grabber::获取图像数据(int-image\u-num,unsigned\u-int16***图像数据){
*image_data=新的无符号_int16*[height];
对于(int h=0;h

我的推理有错误吗?

*图像数据[h]
是指
*(图像数据[h])
(即,
图像数据[h][0]
),而不是
(*图像数据)[h]
(或
图像数据[0][h]
)。
后者是你想要的

如果引入局部变量,则更容易获得正确的结果:

int ..::get_image_data(int image_num, unsigned __int16*** image_data) {
    ...
    unsigned __int16** data = new unsigned __int16*[height];
    *image_data = data;
    for (int h = 0; h < height; h++) {
        data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            data[h][w] = ...;
        }
    }
    return 0;
}
int..::获取图像数据(图像数,无符号的图像数据){
...
无符号_int16**data=新的无符号_int16*[高度];
*图像_数据=数据;
对于(int h=0;h
#define dosen不适用于我,您遇到了编译器错误?对不起,没有编译器错误我已经编辑掉了点;如果它们包含重要的代码,您应该包含它们。如果没有,那没关系,你可以把它们省略掉。你不应该这样存储图像数据;使用平面缓冲区(即,
\uuu int16*
)并手动计算索引更容易、更好。更好的方法是使用
std::vector
,它利用标准的typedef并自动管理其内存。更好的解决方案是通过引用传递