gpt4 book ai didi

c - 我用错了memcpy吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:51 25 4
gpt4 key购买 nike

在下面的代码片段中,我希望函数接受一个双指针(二维数组),它可以是任何数据类型(在本例中为整数),并使用 memcpy 一次将数组的一个元素复制到另一个变量.它通过了编译器,但仍然显示访问冲突。

我找遍了论坛各处,但仍然无法解决这个问题。

如有任何提示,我们将不胜感激。我几乎被 C 语言的复杂性搞垮了。

void ShowImg(void **ptr, IplImage *sample, char window_name[])
{
int value;
IplImage *sml_img= cvCreateImage(cvSize(sample->width,sample->height),IPL_DEPTH_8U, 1);
for(int j=0; j<sample->height; j++)
for(int i=0; i<sample->width; i++){
memcpy(&value, ptr+i*sizeof(int)+j*sample->width*sizeof(int), sizeof(int));
((uchar *)(sml_img->imageData + sml_img->widthStep*j))[i] = value;
printf("%d,%d\n", i, j);
}
cvNamedWindow(window_name);
cvShowImage(window_name, sml_img);
cvWaitKey(0);
cvDestroyWindow(window_name);
cvReleaseImage(&sml_img);

}

最佳答案

我认为这里有一个错误:ptr+i*sizeof(int) 因为ptr 的类型是void** ptr+1是下一个元素,意思是ptr+sizeof(void*),为什么要乘以sizeof(int)?

例如:

ptr = 0x00000000, 
sizeof(void*) = 4,
sizeof(int) = 4
||
\/
ptr+1 = 0x00000004.
ptr+1*sizeof(int) = 0x00000010.

而且我认为这不是您想要的。 (关于j*sample->width*sizeof(int)也是一样)

关于c - 我用错了memcpy吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5548847/

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