【发布时间】: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
这里是问题代码:
int* m_A = new int[4]
int* reAlloc = new int[10];
memcpy(reAlloc, m_A, 10 *sizeof(int));
当我编译后,它似乎没问题。
memcpy的第三个参数大于
memcpy的第二个参数?
【问题讨论】:
标签: memcpy
这不好。您的代码不能确保m_A 指向的内存位置至少是10 * sizeof(int) 和reAlloc,因此这些区域可能会重叠。这意味着您的代码会导致未定义的行为。
即使您尝试使用 memmove() 修复它,您仍然处于灰色区域,因为您不知道 *(m_A + 9) 是什么。
可能是您的数据,然后它会起作用(使用memmove(),因为它仍然可能是reAlloc 的数据)。可能不是你的数据,在这种情况下你会得到一些 SIGSEGV。
memcpy() 和 memmove() 是低级内存操作函数,编译器会期望您知道自己在做什么,并且不会发出警告。
【讨论】:
reAlloc 数组中有什么?试着描述你想做什么。