为什么 memcpy 不复制我给它的数据?

Why is memcpy not copying the data I give to it?

我正在用 C++ 编写内存 manager/allocator。 “memcpy”函数似乎没有按预期工作。这是有问题的代码:

template <class Type>
Data<Type> MemoryManager::alloc(Type* data) {
    ...
    printf("Allocating data of size %i at local address %i, absolute address %i\n", allocSize, allocAddress, allocStart + allocAddress);
    ...
    std::cout << *data << std::endl;
    memcpy(data, (Type*)(allocStart + allocAddress), allocSize);
    std::cout << *(Type*)(allocStart + allocAddress) << std::endl;
    ...
}

为了测试,我尝试分配一个值为 20 的整数。当我 运行 这个测试时输出到标准输出的是这样的:

Allocating data of size 4 at local address 0, absolute address 16834208
20
-842150451

如您所见,当我尝试取消引用时,data(指向 Type 的指针)指向正确的值 20。但是,使用memcpy复制到新地址后(也是指向Type的指针),值变成了-842150451。有趣的是,无论我用什么进行测试,无论实际地址最终是什么,它总是这个数字。此外,这个数字不是我系统上整数的最小值——如您所见,整数的大小是 4 个字节。那么这个数字是多少?为什么 memcpy 总是将它复制到我的地址而不是我给它的数据?

编辑:我的参数顺序错误。问题解决了。但我的第二个问题仍然存在,那个数字是多少,为什么无论我的来源是什么,它总是被复制进来?

第一个参数应该是目标,第二个应该是源 像这样:

void * memcpy ( void * destination, const void * source, size_t num );

一个简单的例子:

char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy ( person.name, myname, sizeof(myname) );