【问题标题】:memcpy third argument is bigger than real size of second argumentmemcpy 第三个参数大于第二个参数的实际大小
【发布时间】:2016-04-20 20:09:26
【问题描述】:

这里是问题代码:

int* m_A = new int[4]
int* reAlloc = new int[10];
memcpy(reAlloc, m_A, 10 *sizeof(int));

当我编译后,它似乎没问题。

memcpy的第三个参数大于 memcpy的第二个参数?

【问题讨论】:

  • 未定义的行为。任何事情都有可能发生。

标签: memcpy


【解决方案1】:

好。您的代码不能确保m_A 指向的内存位置至少是10 * sizeof(int)reAlloc,因此这些区域可能会重叠。这意味着您的代码会导致未定义的行为

即使您尝试使用 memmove() 修复它,您仍然处于灰色区域,因为您不知道 *(m_A + 9) 是什么。

可能是您的数据,然后它会起作用(使用memmove(),因为它仍然可能是reAlloc 的数据)。可能不是你的数据,在这种情况下你会得到一些 SIGSEGV。

memcpy()memmove() 是低级内存操作函数,编译器会期望您知道自己在做什么,并且不会发出警告。

【讨论】:

  • hmm.. 好吧,我明白了,那有什么解决办法吗???其他操作???
  • 嗯,不。如果你有 4 个整数,为什么要复制 10 个?操作后您希望reAlloc 数组中有什么?试着描述你想做什么。
猜你喜欢
  • 2018-03-22
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2021-05-04
  • 2021-12-20
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多