C++ 将MAT映像复制到c+中的特定地址+;

C++ 将MAT映像复制到c+中的特定地址+;,c++,linux,opencv,memcpy,C++,Linux,Opencv,Memcpy,我正在尝试将加载的MAT图像从文件复制到特定的地址位置。我有以下代码 int main() { cv::Mat inImg = cv::imread("M6_traffic.jpg"); //Data point copy unsigned char * pData = (unsigned char *)inImg.data; unsigned char * Dest = (unsigned char *)0x0f000000;; int

我正在尝试将加载的MAT图像从文件复制到特定的地址位置。我有以下代码

int main()
{

    cv::Mat inImg =    cv::imread("M6_traffic.jpg");

    //Data point copy
    unsigned char * pData = (unsigned char *)inImg.data;
    unsigned char * Dest   = (unsigned char *)0x0f000000;;

    int width = inImg.rows;
    int height = inImg.cols;

    //data copy using memcpy function
    memcpy(Dest, pData, sizeof(unsigned char)*width*height*3);

}

但当我运行它时,它总是崩溃,知道为什么吗?还有更好的理由这样做吗?我的最终目标是能够将图像数据复制到基于Linux的系统中的特定地址

可能地址0x0f000000上没有分配的内存。 您不能强制此地址为有效地址

使用malloc分配适当大小的内存,它就会工作。 然后,操作系统确定您的地址空间并返回指向它的指针

unsigned char* Dest = malloc(sizeof(pData));
memcpy(Dest, pData, sizeof(pData))

0x0f000000本质上是一个空指针。您试图做的是将数据复制到未使用
memcpy(Dest、pData、sizeof(unsigned char)*宽度*高度*3)设置的内存地址中

您应该在
memcpy
语句之前为
Dest
分配内存。您可以使用
malloc
calloc
执行此操作。下面的链接介绍了这些函数调用。希望这有帮助


您应该添加崩溃的详细信息、给定的错误等。崩溃发生在哪一行?你遗漏了很多细节,这些细节有助于回答你的问题。我建议阅读并重新思考您的问题“我的最终目标是能够在基于Linux的系统中将图像数据复制到特定地址”,为什么?这是另一个我认为需要更多背景知识的领域。您的系统是否允许您复制到该地址?大多数现代操作系统不允许将数据填充到内存中的任意地址。。。。这就是你崩溃的原因。除了上面所说的,请注意,cols是图像的宽度,rows是图像的高度。一般来说,这对于复制并不重要,但对于以后在复制后使用图像可能很重要。代码中还有另一个问题。不能保证图像是连续的。例如,出于优化原因,图像可能在每行的末尾都有一个填充。您应该确保映像是连续的(例如,通过调用.clone()和/或测试.isContinuous);;Dest=(无符号字符*)malloc(sizeof(无符号字符)*宽度高度*3);操作系统将把Dest分配到第二行的另一个地址?我试图将数据复制到特定的虚拟地址,我知道该虚拟地址与我需要在某些FPGA逻辑中使用的物理地址相匹配,有没有办法做到这一点?