有关使用memcpy将表达式值复制到指针的查询

时间:2017-10-21 04:45:15

标签: c++ memory-management memcpy

我希望将表达式(这是一个int)的结果设置为int指针。如果我执行以下操作:

int* a = new int;
memcpy(a, (int*)(3+4), sizeof(int));

我无法绕过它的预期行为。它会将值7复制到预期的a中。或者它会导致一些未定义的行为

1 个答案:

答案 0 :(得分:3)

不,这不会复制那里的值7。相反,你会得到未定义的行为。

考虑将memcpy(dest, source, size)写为“请转到source指定的内存地址并从中复制size个字节。如果你写(int *)(3 + 4),你会得到一个数字值为7的指针,这意味着它指向内存地址7.正如你不希望一个街区上的137号房子被名为先生和夫人的人居住。137,你不应该期望内存地址7的内容是数值7。

实际上,内存地址7甚至不太可能是您可以读取或写入的存储。你基本上用类型转换“组成”了一个地址,并且没有理由相信那里有任何有意义的东西。想象一下,在一封信上写下一个虚假的邮寄地址,然后将其放入邮件中。它实际上到达任何人的可能性很小,如果确实达到了它们,他们就不知道你为什么要联系他们。

从语言的角度来看,这是未定义的行为,在大多数系统上它都是段错误的。