Arrays memcpy是否适用于结构中的大型阵列?

Arrays memcpy是否适用于结构中的大型阵列?,arrays,memcpy,Arrays,Memcpy,我有一个结构,里面有一个动态数组。我定义了其中两种结构 我在第一个结构中填充数组,然后使用 memcpy(R->v,A->v,A->n*sizeof(双精度) 其中v是动态分配的数组,n是条目数 如果这很重要的话,R和A是相同的类型 问题是,这些值没有被正确地复制到R中。知道为什么吗?当我尝试在totalview中调试时,memcpy进入了一个名为“very_gigh_loop”的函数,但没有抛出异常或任何东西 该阵列的长度约为188k倍 感谢这可能是内存对齐。某些体系结构不喜欢像double这

我有一个结构,里面有一个动态数组。我定义了其中两种结构

我在第一个结构中填充数组,然后使用

memcpy(R->v,A->v,A->n*sizeof(双精度)

其中v是动态分配的数组,n是条目数

如果这很重要的话,R和A是相同的类型

问题是,这些值没有被正确地复制到R中。知道为什么吗?当我尝试在totalview中调试时,memcpy进入了一个名为“very_gigh_loop”的函数,但没有抛出异常或任何东西

该阵列的长度约为188k倍


感谢这可能是内存对齐。某些体系结构不喜欢像
double
这样的多字节值从任意字节地址开始。分配阵列内存时,您可能希望使用像
memalign()
这样的函数,而不是
malloc()
。如果您使用的是
new double[n]
那么它应该已经正确对齐。

memcpy应该可以很好地适应您描述的情况,尽管您遗漏了一些可能会更清楚的细节(数组的类型,它们的大小是否相同?是否在这两种类型中都分配了足够的内存来容纳n*8字节?等等)。它可能工作正常,并且调试器向您显示了不正确的值(例如,如果您正在调试发布版本,它可能无法正确地可视化这些值)。此外,请在复制之前检查a->v是否包含正确的值-可能在您进行复制之前有什么东西正在损坏它?