【问题标题】:Does memcpy work for large arrays in structures?memcpy 是否适用于结构中的大型数组?
【发布时间】:2010-06-28 21:34:30
【问题描述】:

我有一个结构,其中包含一个动态数组。我已经定义了其中的两个结构。

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

memcpy(R->v, A->v, A->n*sizeof(double)

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

如果重要的话,R 和 A 是同一类型。

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

数组的长度约为 188k 双倍。

谢谢

【问题讨论】:

  • memcpy 对于您描述的情况应该可以正常工作,尽管您错过了一些可能会更清楚的细节(数组的类型,它们的大小是否相同?您是否在两者中分配了足够的内存保存 n*8 字节?等)。它可能工作正常并且调试器向您显示不正确的值(例如,如果您正在调试发布版本,它可能无法正确显示这些值)。还要检查 A->v 在复制之前是否包含正确的值——也许在你复制之前有什么东西破坏了它?

标签: arrays memcpy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2012-03-30
    相关资源
    最近更新 更多