c - 我用错了memcpy吗?

标签 c memcpy

在下面的代码片段中,我希望函数接受一个双指针(二维数组),它可以是任何数据类型(在本例中为整数),并使用 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/

相关文章:

c - 当我尝试向我的结构添加变量时出现段错误

c - 使用不同的数据类型逐行读取文件中的数据

c - strncmp C 练习

c - 通过引用外部函数传递 gchar ** 以便在主函数中释放

java - 使用 nar-maven-plugin 将外部 .so 库添加到 jni 项目

c - 将 memcpy 与 void 指针一起使用时出现段错误 - C

c - gcc 优化掉复合语句

c - 在结构中分配和访问指向字符串的指针

c++ - 将内存复制到结构时出现 EXC_BAD_ACCESS

c - 与左节点比较后删除节点