2017-04-26 53 views
-2

我剛剛開始使用C++,從高級語言轉向。對於我正在建設的東西,我正在分配空間,然後弄清楚你有什麼樣的對象。這很像下面,但下面不起作用 - 我希望能恢復我的45歲,但我想,我正在獲得一個內存位置。我搞砸了什麼?Memcpy到mallocd的位置

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

你的代碼很Cish。你真的不應該在C++中降低這一點。你能解釋你實際上想要做什麼嗎?應該有一個C++的方式來做到這一點。 – NathanOliver

+2

如果你正在學習C++,你會更好地遵循[良好的C++書](http://stackoverflow.com/q/388242/1782465),而不是從C概念開始。這段代碼與「適當的」C++很少有關係,它是C. – Angew

+3

你應該解除引用'b',但是你正在使用它的地址。 – ForceBru

回答

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++中很少使用,所以最好完全避免他們需要一些庫時除外。