在我正在编写的代码中,我需要执行以下操作:
以下代码是该概念的一个小示例:
#include <iostream>
#include <map>
#include <cstring>
int main()
{
struct hdr {
int cpi_length = 42;
} ;
void* this_hdr = new hdr;
std::map<int, hdr(*)[20]> SP;
std::cout << sizeof(hdr) << std::endl; // "4"
std::cout << sizeof(this_hdr) << std::endl; // "4"
std::cout << sizeof(SP[0][0]); // "80"
std::memcpy(SP[0][0], this_hdr, sizeof(hdr)); // "Error: access violation"
std::cout << SP[0][0]->cpi_length;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给我带来了两个问题:1)如何解决尝试使用 memcpy 时的运行时错误,2)一旦解决了错误,我如何确保此代码将执行我所描述的操作?
如命令所示sizeof
,被复制的结构实例的大小与结构本身相同,并且(显然)比它被复制到的数组元素的大小小得多。那么为什么会出现访问冲突呢?应该有足够的空闲空间。
我知道为什么我会memcpy
在这个实例中使用,为什么我要使用缓冲区指针而不是向量等,这可能看起来很愚蠢。这只是一个可重现的示例,请理解在实际代码中我仅限于这些实现选择。现在,我不再假设我只是犯了一些简单的错误,例如在引用/取消引用指针时混淆了语法。