我试图将从文件中加载的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的系统中的特定地址
答案 0 :(得分:1)
可能在地址0x0f000000上没有分配内存。 并且你不能强迫它成为有效的地址
使用malloc分配正确大小的内存,它将起作用。 然后操作系统确定您的地址空间并返回指向它的指针。
unsigned char* Dest = malloc(sizeof(pData));
memcpy(Dest, pData, sizeof(pData))
答案 1 :(得分:1)
0x0f000000本质上是一个空指针。您要做的是将数据复制到尚未使用memcpy(Dest, pData, sizeof(unsigned char)*width*height*3);
设置的内存地址中。
您应该在Dest
声明之前为memcpy
分配内存。您可以使用malloc
或calloc
执行此操作。以下链接描述了这些函数调用。希望这有帮助!