Memcpy到mallocd位置

时间:2017-04-26 12:44:02

标签: c++ malloc

我刚刚开始使用C ++,从更高级别的语言开始。对于我正在构建的东西,我分配空间,然后确定你拥有什么样的对象。它与下面的内容相似,但是下面的内容并不起作用 - 我希望能够恢复我的45,但我想到了一个内存位置。我搞砸了什么?

void *ptr;
int a = 45;
ptr = malloc(sizeof(int));
memcpy(ptr, &a, sizeof(int));
int *b;
b = (int*)ptr;
std::cout << &b;

1 个答案:

答案 0 :(得分:1)

与评论一样:将std::cout << &b;更改为std::cout << *b;

但是,如果你真的需要malloc,接下来可能会更容易:

int *ptr;
int a = 45;
ptr = static_cast<int*>(malloc(sizeof(int)));
*ptr = a;  // memcpy(ptr, &a, sizeof(int)); can be done, but is not necessary.
std::cout << *ptr;
free(ptr);

更多C ++但不建议:

int ptr* = new int(a);
std::cout << *ptr;
delete ptr;

当指针具有明确的范围时更简单,因为您不必记得清理:

std::unique_ptr<int> ptr = std::make_unique(a);
std::cout << *ptr;

但是,指向原语的指针在C ++中几乎没有用处,所以最好完全避免使用它们,除非在某些库中需要它们。